Sintassi di PropertyPath

Applies to Windows and Windows Phone

Puoi usare la classe PropertyPath e la sintassi della stringa per creare un'istanza di un valore PropertyPath in XAML o in codice. I valori PropertyPath sono usati dall'associazione dati. Una sintassi simile è usata per la destinazione delle animazioni nello storyboard. Tuttavia la destinazione delle animazioni non crea valori PropertyPath sottostanti, piuttosto mantiene le informazioni come stringa. Per entrambi gli scenari, un percorso di proprietà descrive l'attraversamento di uno o più relazioni oggetto-proprietà che finiscono col risolversi in una singola proprietà.

Puoi impostare una stringa del percorso di proprietà direttamente su un attributo in XAML. Puoi usare la stessa sintassi della stringa per costruire una classe PropertyPath che imposta una classe Binding nel codice, oppure per impostare la destinazione di un'animazione nel codice usando il metodo SetTargetProperty. In Windows Runtime sono presenti due distinte aree di funzionalità che usano il percorso di proprietà: l'associazione dati e la destinazione animazioni. La destinazione animazioni non crea valori PropertyPath sottostanti nell'implementazione di Windows Runtime, ma memorizza le informazioni come stringa. Tuttavia, i concetti alla base dell'attraversamento oggetto-proprietà sono molto simili. L'associazione dati e la destinazione animazioni valutano in modo leggermente diverso il percorso di proprietà, pertanto forniremo due descrizioni distinte del percorso di proprietà.

Percorso di proprietà per gli oggetti nell'associazione dati

In Windows Runtime puoi associare il valore di destinazione di qualsiasi proprietà di dipendenza. Il valore della proprietà di origine per un'associazione dati non deve essere necessariamente una proprietà di dipendenza; può essere una proprietà su un oggetto business (ad esempio, una classe scritta in linguaggio Microsoft .NET o C++). In alternativa, l'oggetto di origine per il valore di associazione può essere un oggetto dipendenza esistente, già definito dall'app. All'origine è possibile fare riferimento tramite un semplice nome di proprietà, o tramite un attraversamento delle relazioni oggetto-proprietà nell'oggetto grafico dell'oggetto business.

Puoi creare un'associazione a un singolo valore di proprietà oppure a una proprietà di destinazione che include elenchi o raccolte. Se la tua origine è una raccolta, o se il percorso specifica una proprietà raccolta, il motore di associazione dati crea una corrispondenza tra gli elementi della raccolta dell'origine e la destinazione dell'associazione, determinando un particolare comportamento, ad esempio la popolazione di un controllo ListBox con un elenco di elementi da una raccolta dell'origine dati senza la necessità di anticipare gli elementi specifici in tale raccolta.

Attraversamento di un oggetto grafico

L'elemento della sintassi che denota l'attraversamento di una relazione oggetto-proprietà in un oggetto grafico è il carattere punto (.). Ogni punto in una stringa del percorso di proprietà indica una divisione tra un oggetto (a sinistra del punto) e una proprietà di tale oggetto (a destra del punto). La stringa viene interpretata da sinistra a destra e in questo modo è possibile eseguire una a una le molteplici relazioni oggetto-proprietà. Ecco un esempio:

<Binding Path="Customer.Address.StreetAddress1"

Ecco come viene valutato questo percorso:

  1. Nell'oggetto del contesto dei dati (o una proprietà Source specificata dallo stesso Binding) viene eseguita la ricerca di una proprietà denominata "Customer".
  2. Nell'oggetto corrispondente al valore della proprietà "Customer" viene eseguita la ricerca di una proprietà denominata "Address".
  3. Nell'oggetto corrispondente al valore della proprietà "Address" viene eseguita la ricerca di una proprietà denominata "StreetAddress1".

A ognuno di questi passaggi, il valore viene trattato come un oggetto. Il tipo di risultato viene controllato solo quando l'associazione è applicata a una proprietà specifica. Questo esempio produrrebbe un errore se "Address" fosse un semplice valore di stringa e non esponesse quale parte della stringa corrisponde all'indirizzo. In genere l'associazione punta ai valori annidati della proprietà specifica di un oggetto business che ha una struttura di informazioni conosciuta e intenzionale.

Regole per le proprietà in un percorso di proprietà per l'associazione dati

  • Tutte le proprietà a cui fa riferimento un percorso di proprietà devono essere pubbliche nell'oggetto business di origine.
  • La proprietà finale (l'ultima proprietà a essere denominata nel percorso) deve essere obbligatoriamente pubblica e variabile (non è possibile eseguire l'associazione a valori statici).
  • La proprietà finale deve essere di lettura/scrittura se questo percorso viene usato come informazione Path per un'associazione bidirezionale.

Indicizzatori

Un percorso di proprietà per l'associazione dati può includere riferimenti a proprietà indicizzate. Ciò consente l'associazione a elenchi ordinati/vettori o a dizionari/mappe. Usa i caratteri di parentesi quadre "[]" per indicare una proprietà indicizzata. Il contenuto di queste parentesi quadre può essere un valore intero (per un elenco ordinato) o una stringa senza virgolette (per i dizionari). Puoi anche eseguire l'associazione a un dizionario, se la chiave è un valore intero. Puoi usare diverse proprietà indicizzate nello stesso percorso con un punto a separare la relazione oggetto-proprietà.

Prendiamo ad esempio un oggetto business con un elenco di "Squadre" (elenco ordinato), ciascuna delle quali ha un dizionario di "Giocatori", dove la chiave per ogni giocatore è il cognome. Un percorso di proprietà per un giocatore specifico nella seconda squadra potrebbe essere, ad esempio: "Squadre[1].Giocatori[Rossi]" (si usa 1 per indicare il secondo elemento in "Squadre" perché l'elenco è con indice zero).

Nota  Il supporto dell'indicizzazione per le origini dati C++ è limitato. Vedi Panoramica dell'associazione dati.

Proprietà associate

I percorsi di proprietà possono includere riferimenti a proprietà associate. Poiché il nome che identifica una proprietà associata include già un punto, devi aggiungere il nome delle proprietà associate tra parentesi, in modo da evitare che il punto venga interpretato come un passaggio oggetto-proprietà. Ad esempio, la stringa per specificare che desideri usare Canvas.ZIndex come percorso di associazione è "(Canvas.ZIndex)". Per altre informazioni sulle proprietà associate, vedi Panoramica delle proprietà associate.

Unione della sintassi del percorso di proprietà

Puoi unire vari elementi della sintassi del percorso di proprietà in un'unica stringa. Potresti ad esempio definire un percorso di proprietà che rimandi a una proprietà associata indicizzata, se la tua origine dati avesse tale proprietà.

Debug di un percorso di proprietà di associazione

Dal momento che un percorso di proprietà deve essere interpretato da un motore di associazione e si basa su informazioni che potrebbero essere disponibili solo in fase di esecuzione, spesso è necessario eseguire il debug di un percorso di proprietà per un'associazione senza poter contare sull'ordinario supporto in fase di progettazione o in fase di compilazione negli strumenti di sviluppo. In molti casi, la mancata risoluzione di un percorso di proprietà in fase di esecuzione è il risultato di un valore vuoto senza errori, perché quello è il comportamento di fallback per la risoluzione dell'associazione in fase di progettazione. Fortunatamente Microsoft Visual Studio offre una modalità di output di debug che è in grado di isolare la parte non risolta di un percorso di proprietà che rimanda a un'origine di associazione. Per altre informazioni sull'uso di questo strumento di sviluppo, vedi la sezione "Debug" dell'argomento Panoramica dell'associazione dati.

Percorso di proprietà per la destinazione delle animazioni

Le animazioni hanno come destinazione una proprietà di dipendenza in cui i valori nello storyboard vengono applicati quando l'animazione viene eseguita. Per identificare l'oggetto nel quale esiste la proprietà da animare, l'animazione definisce come destinazione un elemento in base al nome (x:Name). Spesso è necessario definire un percorso di proprietà che inizia con l'oggetto identificato come Storyboard.TargetName e termina con un particolare valore di proprietà di dipendenza, dove dovrebbe essere applicata l'animazione. Tale percorso di proprietà viene usato come valore per Storyboard.TargetProperty.

Per ulteriori informazioni sulla definizione di animazioni in XAML, vedi Animazioni nello storyboard.

Destinazione semplice

Se stai animando una proprietà che esiste nell'oggetto di destinazione stesso e si tratta di un tipo di proprietà a cui è possibile applicare direttamente un'animazione (senza passare indirettamente per una sottoproprietà di un valore della proprietà), allora puoi semplicemente denominare la proprietà da animare senza ulteriori qualificazioni. Ad esempio, se la tua destinazione è una sottoclasse di Shape, come Rectangle, e devi applicare un Color animato alla proprietà Fill, il tuo percorso di proprietà può essere "Fill".

Destinazione indiretta della proprietà

Puoi animare una proprietà che rappresenta una sottoproprietà dell'oggetto di destinazione. In altre parole, se c'è una proprietà dell'oggetto di destinazione che è essa stessa un oggetto e che a sua volta ha delle proprietà, devi necessariamente definire un percorso di proprietà che spieghi tale relazione oggetto-proprietà passaggio dopo passaggio. Ogni volta che specifichi un oggetto in cui vuoi animare una sottoproprietà, devi racchiudere tra parentesi il nome della proprietà e specificarla nel formato typename.propertyname. Ad esempio, se vuoi il valore oggetto di una proprietà RenderTransform dell'oggetto di destinazione, devi specificare"(UIElement.RenderTransform)" come primo passaggio nel percorso di proprietà. Il percorso non è ancora completo, poiché non esistono animazioni che possano essere applicate direttamente a un valore Transform. Per questo esempio devi completare quindi il percorso di proprietà in modo tale che la proprietà finale sia la proprietà di una sottoclasse Transform e che possa essere animata da un valore Double: "(UIElement.RenderTransform).(CompositeTransform.TranslateX)"

Inserimento di un particolare elemento figlio in una raccolta

Per inserire un elemento figlio in una proprietà raccolta, puoi usare un indicizzatore numerico. Usa i caratteri di parentesi quadre "[]" attorno al valore indice intero. Puoi creare riferimenti solo agli elenchi ordinati, non ai dizionari. Poiché una raccolta non è un valore che possa essere animato, l'indicizzatore non può mai essere usato come proprietà finale di un percorso di proprietà.

Ad esempio, se vuoi animare il primo colore interruzione di colore in un oggetto LinearGradientBrush che è applicato alla proprietà Background di un controllo, il percorso di proprietà è questo: "(Control.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)". Osserva che l'indicizzatore non è l'ultimo passaggio nel percorso e che, in particolare, l'ultimo percorso deve rimandare alla proprietà GradientStop.Color dell'elemento 0 nella raccolta per applicarvi un valore animato Color.

Animazione di una proprietà associata

Sebbene non si tratti di uno scenario comune, è comunque possibile animare una proprietà associata, a patto che tale proprietà abbia un valore proprietà compatibile con un tipo di animazione. Poiché il nome che identifica una proprietà associata include già un punto, devi aggiungere il nome delle proprietà associate tra parentesi, in modo da evitare che il punto venga interpretato come un passaggio oggetto-proprietà. Ad esempio, per specificare che vuoi animare la proprietà associata Grid.Row in un oggetto, usa il percorso di proprietà "(Grid.Row)".

Nota  Per questo esempio, il valore di Grid.Row è un tipo di proprietà Int32, pertanto non può essere animato con un'animazione Double. Devi invece definire un oggetto ObjectAnimationUsingKeyFrames che abbia componenti DiscreteObjectKeyFrame, dove la proprietà ObjectKeyFrame.Value è impostata su un valore intero, ad esempio "0" o "1".

Regole per le proprietà in un percorso di proprietà di destinazione delle animazioni

  • Il punto di partenza di un percorso di proprietà è l'oggetto identificato da Storyboard.TargetName.
  • Tutti gli oggetti e le proprietà a cui si fa riferimento lungo il percorso di proprietà devono essere pubblici.
  • La proprietà finale (l'ultima proprietà a essere denominata nel percorso) deve essere pubblica, deve essere accessibile in lettura-scrittura e deve essere una proprietà di dipendenza.
  • Il tipo di proprietà della proprietà finale deve poter essere animato da una delle classi generali dei tipi di animazione (animazioni Color, animazioni Double, animazioni Point , ObjectAnimationUsingKeyFrames).

La classe PropertyPath

La classe PropertyPath è il tipo di proprietà sottostante per Binding.Path nello scenario di associazione.

Il più delle volte, puoi applicare una classe PropertyPath in XAML senza usare altro codice. In alcuni casi, tuttavia, potrebbe essere necessario usare il codice per definire un oggetto PropertyPath e assegnarlo a una proprietà in fase di esecuzione.

La classe PropertyPath ha un costruttore PropertyPath(String) e non ha un costruttore predefinito. La stringa che passi a questo costruttore è una stringa che viene definita usando la sintassi del percorso di proprietà nel modo descritto in precedenza. È inoltre la stessa stringa che dovresti usare per assegnare la classe Path come attributo XAML. L'unica altra API della classe PropertyPath è la proprietà Path, che è di sola lettura. Potresti usare questa proprietà come stringa di costruzione per un'altra istanza di PropertyPath.

Argomenti correlati

Panoramica dell'associazione dati
Animazioni nello storyboard
Estensione del markup Binding
PropertyPath
Binding
Binding constructor
DataContext

 

 

Mostra:
© 2014 Microsoft