Megosztás:


Tulajdonság-elérési út szintaxisa

A PropertyPath osztály és a szöveges szintaxis használatával létrehozhat egy PropertyPath-értéket akár XAML-ben, akár kódban. A PropertyPath-értékeket adatkötés használja. Hasonló szintaxist használnak a forgatókönyvezett animációk megcélzásához. Mindkét forgatókönyv esetében a tulajdonságútvonal egy vagy több objektum-tulajdonság kapcsolat bejárását írja le, amely végül egyetlen tulajdonságra lesz feloldva.

A tulajdonság elérési útjának sztringje közvetlenül egy attribútumra állítható be az XAML-ben. Ugyanezzel a sztringszintaxissal létrehozhat egy PropertyPathot, amely kódban állítja be a Kötést, vagy beállíthat egy animációs célt kódban a SetTargetProperty segítségével. A Windows futtatókörnyezetben két különböző funkcióterület található, amelyek tulajdonságelérési utat használnak: adatkötést és animációs célzást. Az animációcélzás a Windows futtatókörnyezet implementációjában nem hoz létre mögöttes tulajdonságútvonal-szintaxis értékeket, hanem az információt szövegként tartja meg, de az objektumtulajdonság-bejárás fogalmai nagyon hasonlóak. Az egyes adatkötések és animációk kissé eltérően értékelik ki a tulajdonság elérési útját, ezért a tulajdonság elérési útjának szintaxisát külön-külön ismertetjük.

Az adatkötésben lévő objektumok tulajdonságútvonala

A Windows futtatókörnyezetben bármely függőségi tulajdonság célértékéhez kapcsolódhat. Az adatkötés forrástulajdonság-értékének nem kell függőségi tulajdonságnak lennie; ez lehet egy üzleti objektum tulajdonsága (például Egy Microsoft .NET-nyelven vagy C++-ban írt osztály). Vagy a kötési érték forrásobjektuma lehet az alkalmazás által már definiált meglévő függőségi objektum. A forrásra egyszerű tulajdonságnévvel vagy az üzleti objektum objektumgráfjában található objektum-tulajdonság kapcsolatok bejárásával hivatkozhat.

Kapcsolódhat egy adott tulajdonságértékhez, vagy olyan céltulajdonsághoz is, amely listákat vagy gyűjteményeket tartalmaz. Ha a forrás egy gyűjtemény, vagy ha az elérési út egy gyűjteménytulajdonságot határoz meg, az adatkötési motor megfelel a forrás gyűjteményelemeinek a kötési célnak, ami olyan viselkedést eredményez, mint például a ListBox feltöltése egy adatforrásgyűjtemény elemeinek listájával anélkül, hogy előre kellene látnia a gyűjtemény adott elemeit.

Objektumdiagram bejárása

A szintaxis azon eleme, amely egy objektum-tulajdonság kapcsolat bejárását jelzi egy objektumdiagramon, a pont (.) karakter. A tulajdonságútvonal-sztring minden pontja egy objektum (a pont bal oldala) és az objektum tulajdonsága (a pont jobb oldala) közötti osztást jelzi. A sztring kiértékelése balról jobbra történik, így több objektum-tulajdonság kapcsolaton keresztül lépegethet. Lássunk egy példát:

"{Binding Path=Customer.Address.StreetAddress1}"

Az elérési út kiértékelése a következőképpen történik:

  1. Az adatkörnyezet objektuma (vagy egy azonos kötés által megadott forrás) egy "Customer" nevű tulajdonságra keres.
  2. Az objektum, amely az "Ügyfél" tulajdonság értékét tartalmazza, egy "Cím" nevű tulajdonság után kutat.
  3. A "Address" tulajdonság értékét tartalmazó objektumot a rendszer egy "StreetAddress1" nevű tulajdonságra keresi.

Ezen lépések mindegyikénél az érték objektumként lesz kezelve. Az eredmény típusát csak akkor ellenőrzi a rendszer, ha a kötés egy adott tulajdonságra van alkalmazva. Ez a példa akkor hiúsulna meg, ha a "Cím" csak egy sztringérték lenne, amely nem fedi fel a sztringnek azt a részét, amely az utcacím. A kötés általában egy ismert és szándékos információstruktúrával rendelkező üzleti objektum adott beágyazott tulajdonságértékére mutat.

Az adatkötési tulajdonság elérési útjának tulajdonságaira vonatkozó szabályok

  • A tulajdonságútvonal által hivatkozott összes tulajdonságnak nyilvánosnak kell lennie a forrás üzleti objektumban.
  • A végtulajdonságnak (az elérési út utolsó elnevezett tulajdonságának) nyilvánosnak kell lennie, és nem módosíthatónak kell lennie – statikus értékekhez nem köthető.
  • A végpont tulajdonságának olvashatónak és írhatónak kell lennie, amikor ezt az útvonalat kétirányú kötés Path információjaként használják.

Indexelők

Az adatkötés tulajdonságútvonala tartalmazhat indexelt tulajdonságokra mutató hivatkozásokat. Ez lehetővé teszi a rendezett listákhoz/vektorokhoz, illetve a szótárakhoz/térképekhez való kötést. Indexelt tulajdonság jelöléséhez használjon szögletes zárójeleket "[]" karaktereket. A zárójelek tartalma lehet egész szám (rendezett lista esetén) vagy idézőjelek nélküli szöveg (szótárak esetén). Olyan szótárhoz is köthet, amelyben a kulcs egész szám. Ugyanabban az elérési úton különböző indexelt tulajdonságokat használhat, ponttal elválasztva az objektum és a tulajdonság között.

Vegyük például azt az üzleti objektumot, amelyben szerepel a "Csapatok" (rendezett lista) listája, amelyek mindegyike rendelkezik egy "Játékosok" szótárával, ahol minden játékos vezetéknév szerint van kulcsolva. A második csapat egy adott játékosának egy tulajdonságútvonala például a következő: "Teams[1]. Játékosok[Smith]". (1-et használ a "Teams" második elemének jelzésére, mert a lista indexeletlen.)

Megjegyzés:

A C++ adatforrások indexelésének támogatása korlátozott; lásd az adatkötés részletes ismertetését.

Csatolt tulajdonságok

A tulajdonság elérési útjai a csatolt tulajdonságokra mutató hivatkozásokat is tartalmazhatnak. Mivel a csatolt tulajdonság azonosító neve már tartalmaz egy pontot, zárójelbe kell tenni a csatolt tulajdonságnevet, hogy a pont ne legyen objektumtulajdonság-lépésként kezelve. Például a Canvas.ZIndex kötési útvonalként való használatát meghatározó sztring a következő: "(Canvas.ZIndex)". A csatolt tulajdonságokról további információt a Csatolt tulajdonságok áttekintése című témakörben talál.

Tulajdonsági útvonal szintaxis kombinálása

A tulajdonságútvonalak szintaxisának különböző elemei egyetlen sztringben kombinálhatók. Meghatározhat például egy indexelt csatolt tulajdonságra hivatkozó tulajdonságútvonalat, ha az adatforrás rendelkezik ilyen tulajdonságokkal.

Kötés tulajdonság elérési út hibakeresése

Mivel a tulajdonságok elérési útját egy kötésmotor értelmezi, és olyan információkra támaszkodik, amelyek csak futásidőben lehetnek jelen, gyakran hibakeresést kell végeznie a kötés tulajdonságútvonalán anélkül, hogy a fejlesztési eszközökben a hagyományos tervezési vagy fordítási idő támogatására támaszkodhatna. Sok esetben a tulajdonságelérési út sikertelen feloldásának futásidei eredménye üres értékként jelenik meg hiba nélkül, mivel ez a kötésfeloldás tervezett tartalék viselkedése. Szerencsére a Microsoft Visual Studio olyan hibakeresési kimeneti módot biztosít, amely elkülöníti a kötési forrást megadó tulajdonságútvonal melyik részét nem sikerült feloldani. A fejlesztői eszköz funkciójának használatáról további információt az adatkötés "Hibakeresés" szakaszában talál részletesen.

Az animációs célzás tulajdonságútvonala

Az animációk egy olyan függőségi tulajdonság megcélzásán alapulnak, ahol a rendszer a forgatókönyvben szereplő értékeket alkalmazza az animáció futtatásakor. Annak az objektumnak az azonosításához, amelyben az animálni kívánt tulajdonság létezik, az animáció név szerint céloz meg egy elemet (x:Name attribútum). Gyakran szükséges definiálni egy tulajdonság elérési útját, amely a Storyboard.TargetName néven azonosított objektummal kezdődik, és azzal a függőségi tulajdonságértékkel végződik, amelyre az animációt alkalmaznia kell. A rendszer ezt a tulajdonságelérési utat használja a Storyboard.TargetProperty értékként.

Az animációk XAML-ben való definiálásáról további információt a Storyboarded animációi című témakörben talál.

Egyszerű célzás

Ha egy tulajdonságot animál a megcélzott objektumon, és a tulajdonság típusa lehetővé teszi, hogy közvetlen animációt alkalmazzon rá (és nem annak értékének egy altulajdonságára), akkor egyszerűen megnevezheti az animált tulajdonságot további részletezés nélkül. Ha például egy alakzat alosztályát, például a Téglalapot célozza, és animált színt alkalmaz a Kitöltés tulajdonságra, a tulajdonság elérési útja lehet "Kitöltés".

Közvetett tulajdonság célzása

Animálhat egy tulajdonságot, amely a célobjektum altulajdonsága. Más szóval, ha a célobjektumnak egy olyan tulajdonsága van, amely maga az objektum, és az objektum rendelkezik tulajdonságokkal, meg kell határoznia egy tulajdonság elérési útját, amely elmagyarázza, hogyan lépkedhet ezen az objektum-tulajdonság kapcsolaton. Amikor olyan objektumot ad meg, amelyben animálni szeretne egy altulajdonságot, zárójelbe kell helyeznie a tulajdonság nevét, és a tulajdonságot típusnévként kell megadnia. tulajdonságnév formátuma. Ha például meg szeretné adni egy célobjektum RenderTransform tulajdonságának objektumértékét, a tulajdonság elérési útjának első lépéseként a "(UIElement.RenderTransform)" értéket kell megadnia. Ez még nem teljes elérési út, mert nincsenek olyan animációk, amelyek közvetlenül alkalmazhatók az átalakítás értékére. Ezért ebben a példában most befejezi a tulajdonság elérési útját, hogy a végtulajdonság egy Transform alosztály tulajdonsága legyen, amely Double értékkel animálható: "(UIElement.RenderTransform).(CompositeTransform.TranslateX)"

Egy konkrét gyermek megadása egy gyűjteményben

Ha gyermekelemet szeretne megadni egy gyűjteménytulajdonságban, használhat numerikus indexelőt. Használjon szögletes zárójeleket "[]" karaktereket az egész szám indexértéke körül. Csak rendezett listákra hivatkozhat, szótárakra nem. Mivel a gyűjtemény nem animálható érték, az indexelők használata soha nem lehet a tulajdonság elérési útjának végpontja.

Ha például meg szeretné adni, hogy egy vezérlő Háttér tulajdonságára alkalmazott LinearGradientBrush első színmegálló színét szeretné animálni, ez a tulajdonság elérési útja: "(Control.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)". Figyelje meg, hogy az indexelő nem az elérési út utolsó lépése, és hogy az utolsó lépésnek különösen a gyűjtemény 0. elemének GradientStop.Color tulajdonságára kell hivatkoznia, hogy szín animált értéket alkalmazzon rá.

Csatolt tulajdonság animálása

Ez nem gyakori forgatókönyv, de animálható egy csatolt tulajdonság, amennyiben a csatolt tulajdonság tulajdonságértéke megegyezik egy animációs típussal. Mivel a csatolt tulajdonság azonosító neve már tartalmaz egy pontot, zárójelbe kell tenni a csatolt tulajdonságnevet, hogy a pont ne legyen objektumtulajdonság-lépésként kezelve. A Grid.Row csatolt tulajdonság objektumon való animálását megadó sztring például használja a(z) "(Rács.Sor)" tulajdonság elérési útját.

Megjegyzés:

Ebben a példában a Grid.Row értéke egy Int32 tulajdonságtípus. így nem animálhatja dupla animációval. Ehelyett egy DiscreteObjectKeyFrame-összetevőkkel rendelkező ObjectAnimationUsingKeyFrame-eket definiál, ahol az ObjectKeyFrame.Value értéke egy egész szám, például "0" vagy "1".

Az animáció tulajdonságútvonalát célzó tulajdonságokra vonatkozó szabályok

  • A tulajdonságútvonal feltételezett kiindulópontja a Storyboard.TargetName által azonosított objektum.
  • A tulajdonságútvonal mentén hivatkozott összes objektumnak és tulajdonságnak nyilvánosnak kell lennie.
  • A végtulajdonságnak (az elérési út utolsó elnevezett tulajdonságának) nyilvánosnak, írási-olvasási és függőségi tulajdonságnak kell lennie.
  • A végtulajdonságnak olyan tulajdonságtípussal kell rendelkeznie, amelyet az animációs típusok széles osztályai (színanimációk, dupla animációk, pontanimációk, ObjectAnimationUsingKeyFrames) képesek animálni.

A PropertyPath osztály

A PropertyPath osztály a Kötés.Elérési út mögöttes tulajdonságtípusa a kötési forgatókönyvhöz.

A legtöbbször alkalmazhat egy PropertyPath XAML-ben anélkül, hogy bármilyen kódot használna. Bizonyos esetekben azonban érdemes lehet egy PropertyPath-objektumot kóddal definiálni, és futásidőben hozzárendelni egy tulajdonsághoz.

A PropertyPath osztálynak van egy PropertyPath(String) konstruktora, és nincs alapértelmezett konstruktorra. A konstruktornak átadott sztring egy olyan sztring, amely a tulajdonság elérési útjának szintaxisával van definiálva, ahogyan azt korábban elmagyaráztuk. Ez ugyanaz a sztring is, amelyet az Elérési út XAML-attribútumként való hozzárendeléséhez használ. A PropertyPath osztály egyetlen másik API-ja a Path tulajdonság, amely írásvédett. Ezt a tulajdonságot használhatja egy másik PropertyPath-példány karakterláncaként.