WPF Fundamentals Part 2 - AttachedProperties

by Florin 18. September 2009 04:09

Proprietatile atasate sunt un caz aparte de DependencyProperties. Motivul principal pentru care exista este necesitatea de a corela elemente de layout intre ele. In articolul despre Dependency Properties, descriam cazul in care elemente de interfata sunt incuibate in controale container. 

Sa luam in considerare cazul in care dorim sa setam pozitia unui buton intr-un Canvas. Codul va arata in felul urmator:

 

butonulMeu.SetValue(Canvas.TopProperty, 20);

butonulMeu.SetValue(Canvas.LeftProperty, 20);

 

Pentru a seta ZIndex-ul butonului, setam proprietatea Canvas.ZindexProperty

 

butonulMeu.SetValue(Canvas.ZIndexProperty, 3);

Modul de setare este compatibil cu XAML. Astfel acelasi cod pe care il scriem in code behind, poate fi scris astfel in XAML:

 

<Button x:Name="butonulMeu" Canvas.Left=”20” Canvas.Left=”20”
    Canvas.ZIndex
=”3”></Button>

 

Sa luam acum in considerare ca butonul nostru se afla intr-un grid, si vrem sa-I setam proprietatea intr-o celula. Atunci codul ar arata asa:

 

<Button x:Name="butonulMeu" Grid.Row="1" Grid.Column="2" ></Button>

Se vede foarte clar ca pentru contexte diferite, butonul are proprietati diferite. Practic nu ar avea sens sa definim toate proprietatile acestea in interiorul fiecarui clasei fiecarui control, pentru ca ar fi foarte multe si majoritatea nu ar avea sens decat intr-un anumit context. De aici solutia este ca ele sa fie implementate ca proprietati statice in cadrul claselor obiectelor respective (aici Grid si Canvas).

Un lucru care trebuie mentionat este ca proprietatile atasate nu sunt impachetate in proprietati normale .NET. De aici rezulta cateva dezavantaje. Pentru ca membrul pe care dorim sa-l modificam nu face parte din clasa noastra (Button aici), nu vom putea sa ne folosim de intelisense pentru a gasi proprietatea dorita. Un alt dezavantaj este ca toate proprietatile atasate sunt de tip Object, cea ce s-ar putea sa fie neintuitiv pentru ca nu stim exact ce valoarea asteapta proprietatea respectiva.

Ca sa ne fie mai usor, in general (insa nu intodeuna), obiectul container contine metode de tip SetProperty. De exemplu, Clasa grid contine metode statice de genul:

 

Grid.SetColumn(butonulMeu, 1);

Grid.SetColumnSpan(butonulMeu, 1);

Grid.SetRow(butonulMeu, 1);

Grid.SetRowSpan(butonulMeu, 1);

 

Un alt exemplu este clasa DockPanel:

 

DockPanel.SetDock(butonulMeu, Dock.Left);

 

in loc de:

 

butonulMeu.SetValue(DockPanel.DockProperty, Dock.Left);

 

Comments


Salut! Interesant. Lucruri bune de stiut.

Nituleac Mihai


Took me time to read all the comments, but I really enjoyed the article. It proved to be Very helpful to me and I am sure to all the commenters here! It's always nice when you can not only be informed, but also entertained! I'm sure you had fun writing this article.

Options Trading


There are certainly a lot of details like that to take into consideration. That?s a great point to bring up. I offer the thoughts above as general inspiration but clearly there are questions like the one you bring up where the most important thing will be working in honest good faith. I don?t know if best practices have emerged around things like that, but I am sure that your job is clearly identified as a fair game.

Education Blog


Couldn?t be written any better. Reading this post reminds me of my old room mate! He always kept talking about this. I will forward this article to him. Pretty sure he will have a good read. Thanks for sharing!

Get out of debt

Add comment

Nume

Email

Website

biuquote
Loading



Powered by BlogEngine.NET 1.5.0.7