La sintassi XAML di Windows Presentation Foundation

5 pagine in totale: <<Indietro 1 2 3 [4] 5 Avanti >>

Attached Properties

Le Attached Properties rappresentano una forma specializzata delle Dependency Properies poiché non dispongono di proprietà wrapper per facilitarne l'utilizzo e hanno una sintassi speciale in XAML.

Lo scopo delle Attachet Properties è quello di memorizzare nei figli il valore di una proprietà definita nel controllo padre. Questa necessità deriva dal fatto che alcune caratteristiche di un elemento variano o sono disponibili a seconda del controllo che lo contiene. Tipicamente questa funzionalità viene utilizzata dai controlli figli per informare il controllo padre su come essere visualizzati, allo scopo di definirne il Layout.

Un esempio concreto di Attached Properties è DockPanel.Dock, creata appositamente per essere utilizzata dai controlli che DockPanel contiene, al solo scopo di definirne il posizionamento.

L'esempio seguente illustra come impostare una Attached Properties in XAML:

<DockPanel>
    <Button DockPanel.Dock="Top">Hello WPF</Button>
</DockPanel>

In XAML il valore della proprietà viene impostato come attributo utilizzando la sintassi AttachPropertyProvider.Nomeproprietà. Nell'esempio precedente DockPanel.Dock, proprietà simile nella sintassi ad una proprietà statica, non ha corrispettivo in codice procedurale, ma equivale ad i metodi GetDock e SetDock definiti nella classe DockPanel, utilizzati poi dal parser XAML per impostare correttamente il valore della proprietà.

Per questo motivo la classe che definisce una Attached Properties deve obbligatoriamente anche definire i metodi necessari ad accedervi aderenti alla seguente regola:
Get[nome proprietà] e Set[nome proprietà]
La pena nel non rispettare questa sintassi è l'impossibilità di utilizzare l'Attached Propety.

Il rispettivo della sintassi dichiarativa di XAML in codice procedurale è il seguente:

DockPanel myDockPanel = new DockPanel();
Button myButton = new Button();
myDockPanel.Children.Add(myButton);
DockPanel.SetDock(myButton, Dock.Top);

Essendo le Attached Properties una forma particolare delle Dependency Properties, necessitano analogamente della registrazione nel property system di WPF utilizzando il metodo:

public static DependencyProperty RegisterAttached (string name,
    Type propertyType,
    Type ownerType)

I parametri passati all'overload del metodo RegisterAttached sono del tutto simili a quanto già visto per la registrazione delle Dependency Properties e simile anche nell'implementazione:

public static readonly DependencyProperty NumberProperty =
    DependencyProperty.RegisterAttached("Number",
        typeof(int),
        typeof(myClass));

    public static void SetNumber(DependencyObject d, int Number) {
        d.SetValue(NumberProperty, Number);
    }

    public static int GetNumber(DependencyObject d) {
        return (int)d.GetValue(NumberProperty);
    }

Se le analogie con la registrazione delle Dependency Properties sono molte, altrettanto evidente è la mancanza della proprietà wrapper. Al suo posto è presente l'implementazione dei due metodi aderenti alla sintassi Get[nome proprietà] Set[nome proprietà].

5 pagine in totale: <<Indietro 1 2 3 [4] 5 Avanti >>

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.



TUTORIALS


IN EVIDENZA
MISC