Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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:
- Az adatkörnyezet objektuma (vagy egy azonos kötés által megadott forrás) egy "Customer" nevű tulajdonságra keres.
- Az objektum, amely az "Ügyfél" tulajdonság értékét tartalmazza, egy "Cím" nevű tulajdonság után kutat.
- 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.
Kapcsolódó témakörök
Windows developer