Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A PropertyPath objektum egy összetett beágyazott XAML-szintaxist támogat a különböző tulajdonságok beállításához, amelyek a PropertyPath típust használják értékként. Ez a témakör a kötési és animációs szintaxisokra alkalmazott PropertyPath szintaxist ismerteti.
Ahol a PropertyPathot használják
PropertyPath egy gyakori objektum, amelyet a Windows Presentation Foundation (WPF) számos funkciójában használnak. Annak ellenére, hogy a közös PropertyPath a tulajdonságútvonal-információk továbbítására szolgál, az egyes funkcióterületek használati adatai, ahol a PropertyPath típusként használják, eltérőek. Ezért célszerűbb a szintaxisokat funkciónként dokumentálni.
A WPF elsősorban PropertyPath használ az objektummodell elérési útjainak leírására az objektum adatforrás tulajdonságainak bejárásához, valamint a célzott animációk célútvonalának leírásához.
Egyes stílus- és sablontulajdonságok, például Setter.Property olyan minősített tulajdonságnevet vesznek fel, amely felületesen hasonlít egy PropertyPath. De ez nem egy valódi PropertyPath; ehelyett egy minősített owner.property karakterlánc formátum-használat, amelyet a WPF XAML processzor és a DependencyPropertytípuskonverterének kombinációja tesz lehetővé.
Adatkapcsolásban lévő objektumok tulajdonságútja
Az adatkötés egy WPF-funkció, amellyel bármely függőségi tulajdonság célértékéhez kapcsolódhat. Az ilyen adatkötés forrásának azonban nem kell függőségi tulajdonságnak lennie; bármilyen tulajdonságtípus lehet, amelyet az alkalmazandó adatszolgáltató felismer. A tulajdonságútvonalakat különösen a ObjectDataProvider-t használják, amely a közös nyelvi futtatókörnyezet (CLR) objektumaiból és azok tulajdonságaiból származó kötési források beszerzésére szolgál.
Ne feledje, hogy az XML-hez való adatkötés nem használja a PropertyPathelemet, mert a Path-ben nem használja a Binding-et. Ehelyett használja a XPath-t, és adjon meg érvényes XPath-szintaxist az adatok XML dokumentumobjektum modelljében (DOM). XPath karakterláncként is van megadva, de itt nincs dokumentálva; lásd: XML-adatok kötése XMLDataProvider és XPath-lekérdezések használatával.
Az adatkötés tulajdonságútvonalainak megértéséhez fontos, hogy a kötést egy adott tulajdonságértékre célozhatja, vagy ehelyett olyan céltulajdonságokhoz kötheti, amelyek listákat vagy gyűjteményeket vesznek fel. Ha gyűjteményeket kapcsol össze, például egy ListBox-t, amely attól függően változtatja méretét, hogy hány adatelem található a gyűjteményben, akkor a tulajdonságelérési útnak a gyűjteményobjektumra kell hivatkoznia, nem pedig az egyes gyűjteményelemekre. Az adatkötési motor automatikusan megfelel az adatforrásként használt gyűjteménynek a kötési cél típusának, ami olyan viselkedést eredményez, mint például egy ListBox egy elemtömbdel való feltöltése.
Az azonnali objektum egyetlen tulajdonsága adatkörnyezetként
<Binding Path="propertyName" ... />
propertyName egy olyan tulajdonság neve kell legyen, amely az aktuális DataContext számára van egy Path használathoz. Ha a kötés frissíti a forrást, a tulajdonságnak olvashatónak/írhatónak kell lennie, a forrásobjektumnak pedig módosíthatónak kell lennie.
Egyetlen indexelő az azonnali objektumon adatkörnyezetként
<Binding Path="[key]" ... />
key egy szótár vagy kivonattábla begépelt indexének vagy egy tömb egész számindexének kell lennie. Emellett a kulcs értékének olyan típusnak kell lennie, amely közvetlenül kötődik ahhoz a tulajdonsághoz, ahol az alkalmazásra kerül. Például egy sztringkulcsokat és sztringértékeket tartalmazó kivonattáblát használhat a TextBoxszövegéhez való kötéshez. Ha a kulcs gyűjteményre vagy alindexre mutat, akkor ezt a szintaxist használhatja egy célgyűjtemény-tulajdonsághoz való kötéshez. Ellenkező esetben egy adott tulajdonságra kell hivatkoznia egy szintaxison keresztül, például <Binding Path="[key].propertyName" .../>.
Szükség esetén megadhatja az index típusát. Az indexelt tulajdonság elérési útjának ezen aspektusával kapcsolatos részletekért lásd: Binding.Path.
Több tulajdonság (közvetett tulajdonság célzása)
<Binding Path="propertyName.propertyName2" ... />
propertyName az aktuális DataContexttulajdonság neveként kell feloldani. Az propertyName és propertyName2 elérési út tulajdonságai bármilyen olyan tulajdonságok lehetnek, amelyek egy kapcsolatban léteznek, ahol a propertyName2 egy olyan tulajdonság, amely a propertyNameértékét képező típuson található.
Egyedülálló tulajdonság, kapcsolt vagy más módon Type-Qualified
<object property="(ownerType.propertyName)" ... />
A zárójelek jelzik, hogy ennek a tulajdonságnak a PropertyPath-ban részleges minősítést alkalmazva kell elkészülnie. Xml-névtér használatával megkeresheti a típust a megfelelő leképezéssel. A ownerType az egyes szerelvények XmlnsDefinitionAttribute deklarációi alapján keres olyan típusokat, amelyekhez egy XAML-processzor hozzáfér. A legtöbb alkalmazás az alapértelmezett XML-névteret a http://schemas.microsoft.com/winfx/2006/xaml/presentation névtérhez rendeli, ezért az előtag általában csak az adott névtéren kívüli egyéni típusokhoz vagy típusokhoz szükséges.
propertyName a ownerTypemeglévő tulajdonság nevének kell lennie. Ezt a szintaxist általában az alábbi esetek egyikére használják:
Az elérési út olyan XAML-ben van megadva, amely olyan stílusban vagy sablonban található, amely nem rendelkezik megadott céltípussal. A minősített használat általában nem érvényes az ettől eltérő esetekre, mert a nem stílusos, nem sablonos esetekben a tulajdonság egy példányon található, nem típus.
A tulajdonság egy csatolt tulajdonság.
Statikus tulajdonsághoz köt.
Storyboard-célként való használathoz a propertyName ként megadott tulajdonságnak DependencyPropertykell lennie.
Forrásbejárás (kötés a gyűjtemények hierarchiáihoz)
<object Path="propertyName/propertyNameX" ... />
Az ebben a szintaxisban szereplő / érték egy hierarchikus adatforrás-objektumon belüli navigálásra szolgál, és a hierarchia több lépését is támogatja egymást követő/ karakterekkel. A forrásbejárás az aktuális rekordmutató pozícióját adja meg, amelyet az adatok és a nézet felhasználói felületének szinkronizálása határoz meg. A hierarchikus adatforrás-objektumokkal való kötéssel és az adatkötés aktuális rekordmutatójának fogalmával kapcsolatos részletekért lásd: A Master-Detail minta használata hierarchikus adatokkal vagy Adatkötés áttekintése.
Megjegyzés:
Felületesen ez a szintaxis az XPath-ra hasonlít. Az XML-adatforráshoz való kötés valódi XPath-kifejezése nem használható Path értékként, hanem a kölcsönösen kizáró XPath tulajdonsághoz kell használni.
Gyűjteménynézetek
Névvel ellátott gyűjteménynézetre való hivatkozáshoz előtagként adja hozzá a gyűjteménynézet nevét kettőskereszttel (#).
Aktuális rekordmutató
Ha gyűjteménynézet vagy fő részletes adatkötési forgatókönyv aktuális rekordmutatójára szeretne hivatkozni, indítsa el az elérési út sztringjét perjellel (/). Az elérési útvonal az előre perjelen túlról az aktuális rekordmutatótól kezdve halad.
Több indexelő
<object Path="[index1,index2...]" ... />
vagy
<object Path="propertyName[index,index2...]" ... />
Ha egy objektum több indexelőt támogat, ezek az indexelők sorrendben adhatók meg, hasonlóan a tömbhivatkozási szintaxishoz. A szóban forgó objektum lehet egy több indexobjektumot tartalmazó tulajdonság aktuális környezete vagy értéke.
Alapértelmezés szerint az indexelő értékeit a rendszer az alapul szolgáló objektum jellemzőivel írja be. Szükség esetén megadhatja az index típusát. Az indexelők beírásával kapcsolatos részletekért lásd: Binding.Path.
Szintaxisok keverése
A fent látható szintaxisok mindegyike összekapcsolható. Az alábbi példa például egy olyan tulajdonság elérési útját hozza létre a színhez egy adott x,y értéken egy ColorGrid tulajdonságnál, amely SolidColorBrush objektumok képpontrács-tömbét tartalmazza:
<Rectangle Fill="{Binding ColorGrid[20,30].SolidColorBrushResult}" ... />
Feloldások tulajdonságútvonal-sztringekhez
Bizonyos üzleti objektumok esetében előfordulhat, hogy a tulajdonság elérési útjának sztringje feloldósorozatot igényel a helyes elemzéshez. A kimenekítésnek ritka esetnek kell lennie, mivel ezen karakterek közül soknak hasonló elnevezés és interakció problémái vannak a nyelvekben, amelyek általában az üzleti objektumok leírására szolgálnak.
Az indexelőkben ([ ]) a kalap karakter (^) kijelöli a következő karaktert.
Meg kell oldani (XML-entitások használatával) bizonyos karakterektől, amelyek az XML definíciója szerint speciálisak. Használja a "
&"-t a "&" karakter elkerülésére. A ">" végcímkét > használatával elkerülheti.A korrektúrakiterjesztés feldolgozásához a WPF XAML-elemző viselkedésére speciális karaktereket kell feloldania (fordított perjel
\használatával).A fordított perjel (
\) maga az escape karakter.Az egyenlőségjel (
=) elválasztja a tulajdonság nevét a tulajdonságértéktől.A vessző (
,) elválasztja a tulajdonságokat.A jobb oldali kapcsos zárójel (
}) a jelölőkiterjesztés vége.
Megjegyzés:
Technikailag ezek a menekülések egy történettulajdonság elérési útjának is működnek, de általában a meglévő WPF-objektumok objektummodelljeit járja be, és a menekülésnek szükségtelennek kell lennie.
Animációs célpontok tulajdonságútja
Az animáció céltulajdonságának olyan függőségi tulajdonságnak kell lennie, amely egy Freezable vagy egy primitív típust vesz igénybe. Egy típus megcélzott tulajdonsága és a végleges animált tulajdonság azonban különböző objektumokon is létezhet. Animációk esetén a tulajdonságútvonal a névvel ellátott animációs célobjektum tulajdonsága és a célanimáció tulajdonsága közötti kapcsolat meghatározására szolgál a tulajdonságértékek objektum-tulajdonság kapcsolatainak bejárásával.
Az animációk általános Object-Property szempontjai
Az animációs fogalmakkal kapcsolatos általános információkért lásd: Storyboards Overview és Animation Overview.
Az animált értéktípusnak vagy tulajdonságnak Freezable típusúnak vagy primitívnek kell lennie. Az elérési utat megkezdő tulajdonságnak egy olyan függőségi tulajdonság neveként kell értelmeződnie, amely a megadott TargetName típuson létezik.
A már lefagyott Freezable klónozásának támogatásához a TargetName által megadott objektumnak FrameworkElement vagy FrameworkContentElement származtatott osztálynak kell lennie.
Egyetlen tulajdonság a célobjektumon
<animation Storyboard.TargetProperty="propertyName" ... />
propertyName a megadott TargetName típuson létező függőségi tulajdonság neveként kell feloldani.
Közvetett tulajdonság célzása
<animation Storyboard.TargetProperty="propertyName.propertyName2" ... />
propertyName olyan tulajdonságnak kell lennie, amely egy Freezable értéktípus vagy egy primitív tulajdonság, amely a megadott TargetName típuson létezik.
propertyName2 annak a függőségi tulajdonságnak a neve kell, hogy legyen, amely a propertyNameértékének számító objektumon található. Más szóval a propertyName2 függőségi tulajdonságként kell léteznie az propertyNamePropertyTypetípushoz.
Az animációk közvetett célzása az alkalmazott stílusok és sablonok miatt szükséges. Az animáció megcélzásához szükség van egy TargetName-ra a célobjektumon, és ezt a nevet a x:Name vagy Namehatározza meg. Bár a sablon- és stíluselemeknek is lehetnek nevei, ezek a nevek csak a stílus és a sablon névhatókörén belül érvényesek. (Ha a sablonok és stílusok megosztják a névtávcsöveket az alkalmazásjelöléssel, a nevek nem lehetnek egyediek. A stílusok és sablonok szó szerint meg vannak osztva a példányok között, és állandósítanák az ismétlődő neveket.) Így ha az animálni kívánt elem egyedi tulajdonságai egy stílusból vagy sablonból származnak, akkor egy elnevezett elempéldánysal kell kezdenie, amely nem stílussablonból származik, majd a stílus vagy a sablon vizualizációs fájára kell céloznia, hogy elérhesse az animálni kívánt tulajdonságot.
Például egy BackgroundPanel tulajdonsága egy témasablonból származó teljes Brush, valójában egy SolidColorBrush. A Brush teljes animálásához szükség lenne egy BrushAnimation -ra (valószínűleg minden Brush típushoz), és nincs ilyen típus. Az ecset animálása helyett az adott Brush típus tulajdonságait kell animálni. A SolidColorBrush alkalmazásához el kell jutnia a Color-ból a ColorAnimation-hez. A példa tulajdonságútvonala Background.Color.
Csatolt tulajdonságok
<animation Storyboard.TargetProperty="(ownerType.propertyName)" ... />
A zárójelek jelzik, hogy ennek a tulajdonságnak a PropertyPath-ban részleges minősítést alkalmazva kell elkészülnie. A típust XML-névtérrel is megkeresheti. A ownerType az egyes szerelvények XmlnsDefinitionAttribute deklarációi alapján keres olyan típusokat, amelyekhez egy XAML-processzor hozzáfér. A legtöbb alkalmazás az alapértelmezett XML-névteret a http://schemas.microsoft.com/winfx/2006/xaml/presentation névtérhez rendeli, ezért az előtag általában csak az adott névtéren kívüli egyéni típusokhoz vagy típusokhoz szükséges.
propertyName a ownerTypemeglévő tulajdonság nevének kell lennie. A propertyName megadott tulajdonságnak kell DependencyProperty-nek lennie. (A WPF-hez csatolt tulajdonságok függőségi tulajdonságokként vannak implementálva, ezért ez a probléma csak az egyéni csatolt tulajdonságokra vonatkozik.)
Indexelők
<animation Storyboard.TargetProperty="propertyName.propertyName2[index].propertyName3" ... />
A legtöbb függőségi tulajdonság vagy Freezable típus nem támogatja az indexelőt. Ezért az animációs útvonal indexelők egyetlen használata köztes szerepet tölt be a láncot egy adott névvel ellátott célon elindító tulajdonság és a végső animált tulajdonság között. A megadott szintaxisban ez propertyName2. Szükség lehet például egy indexelő használatára, ha a köztes tulajdonság egy olyan gyűjtemény, mint például a TransformGroup, egy tulajdonságútvonalon, például a RenderTransform.Children[1].Angle.
PropertyPath a kódban
A PropertyPathkódhasználatát , beleértve a PropertyPathösszeállítását is, a PropertyPathreferenciatémaköre tartalmazza.
A PropertyPath általában két különböző konstruktor használatára tervezték, egyet a kötési és a legegyszerűbb animációs használatokhoz, egyet pedig az összetett animációs használatokhoz. Használja a PropertyPath(Object) aláírást a kötéseknél, ahol az objektum egy húr. Használja az PropertyPath(Object) aláírást egylépéses animációs útvonalakhoz, ahol az objektum egy DependencyProperty. Összetett animációkhoz használja a PropertyPath(String, Object[]) aláírást. Ez utóbbi konstruktor egy jogkivonat-sztringet használ az első paraméterhez, valamint egy objektumtömböt, amely betölti a jogkivonat-sztring pozícióit egy tulajdonságútvonal-kapcsolat meghatározásához.
Lásd még
.NET Desktop feedback