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 Windows Presentation Foundation (WPF) tulajdonságrendszer tartalmaz egy függőségi tulajdonság metaadat-jelentési rendszerét. A metaadat-jelentéskészítési rendszeren keresztül elérhető információk túllépik a tükrözés vagy az általános közös nyelvi futtatókörnyezet (CLR) jellemzői által rendelkezésre álló adatokat. Függőségi tulajdonság regisztrálásakor lehetősége van metaadatok létrehozására és hozzárendelésére. Ha egy függőségi tulajdonságot meghatározó osztályból származik, felülbírálhatja az örökölt függőségi tulajdonság metaadatait. Ha pedig egy függőségi tulajdonság tulajdonosaként adja hozzá az osztályt, felülbírálhatja az örökölt függőségi tulajdonság metaadatait.
Előfeltételek
A cikk feltételezi a függőségi tulajdonságok alapszintű ismeretét, és hogy elolvasta függőségi tulajdonságok áttekintését. A cikkben szereplő példák követéséhez segít, ha ismeri az Extensible Application Markup Language (XAML) nyelvet, és ismeri a WPF-alkalmazások írásának módját.
Metaadatok használata
A függőségi tulajdonság metaadatainak lekérdezésével megvizsgálhatja a függőségi tulajdonság jellemzőit. Amikor a tulajdonságrendszer feldolgoz egy függőségi tulajdonságot, hozzáfér a metaadataihoz. A függőségi tulajdonság metaadat-objektuma a következő típusú információkat tartalmazza:
A függőségi tulajdonság alapértelmezett értéke, amelyet a tulajdonságrendszer állít be, ha nincs más érték, például helyi, stílus vagy öröklési érték. További információért a függőségi tulajdonságértékek futásidejű hozzárendelése során az érték elsőbbségéről lásd a Függőségi tulajdonságérték elsőbbségecímű témakört.
Hivatkozás a kényszerítő érték visszahívására és a tulajdonságváltozás visszahívására a tulajdonos típusán. Csak olyan visszahívásokra lehet hivatkozni, amelyek
publichozzáférés-módosítóval rendelkeznek, vagy az engedélyezett hozzáférési hatókörön belül vannak. A függőségi tulajdonság visszahívásairól további információt Függőségi tulajdonság visszahívásai és érvényesítésicímű témakörben talál.A WPF keretrendszerszintű függőségi tulajdonság jellemzői (ha a függőségi tulajdonság EGY WPF-keretrendszertulajdonság). A WPF-folyamatok, például a keretrendszerelrendezési motor és a tulajdonságöröklési logika, a WPF keretrendszerszintű metaadatainak lekérdezése. További információ: Framework tulajdonság metaadatai.
Metaadat API-k
A PropertyMetadata osztály tárolja a tulajdonságrendszer által használt metaadatok többségét. A metaadat-példányok a következőkkel hozhatók létre és rendelhetők hozzá:
A függőségi tulajdonságokat a tulajdonságrendszerben regisztráló típusok.
Függőségi tulajdonságot meghatározó osztálytól öröklő típusok.
Típusok, amelyek függőségi tulajdonság tulajdonosaként feljegyzik magukat.
Ha egy típus metaadatok megadása nélkül regisztrál egy függőségi tulajdonságot, a tulajdonságrendszer hozzárendel egy PropertyMetadata objektumot az adott típus alapértelmezett értékeivel a függőségi tulajdonsághoz.
Egy függőségi tulajdonság metaadatainak lekéréséhez hívja meg a GetMetadata azonosítón a DependencyProperty túlterhelések egyikét. A metaadatok PropertyMetadata objektumként lesznek visszaadva.
A PropertyMetadataszármazó pontosabb metaadatosztályok különböző architekturális területeken léteznek. Például UIPropertyMetadata támogatja az animációs jelentéskészítést, FrameworkPropertyMetadata pedig a WPF-keretrendszer tulajdonságait. A függőségi tulajdonságok a PropertyMetadata származtatott osztályokkal is regisztrálhatók. Bár GetMetadata egy PropertyMetadata objektumot ad vissza, adott esetben származtatott típusra is vetheti a típusspecifikus tulajdonságok vizsgálatához.
A FrameworkPropertyMetadata által közzétett tulajdonságjellemzőket néha jelzőkneknevezik.
FrameworkPropertyMetadata példány létrehozásakor lehetősége van arra, hogy egy FrameworkPropertyMetadataOptions típusú enumerációs példányt adjon át a FrameworkPropertyMetadata konstruktornak.
FrameworkPropertyMetadataOptions lehetővé teszi, hogy bitenkénti kombinációban adja meg a metaadat-jelzőket. A FrameworkPropertyMetadata a FrameworkPropertyMetadataOptions-et használja, hogy a konstruktor szignatúrájának hossza ésszerű maradjon. A függőségi tulajdonság regisztrálásakor a FrameworkPropertyMetadataOptions beállított metaadat-jelzők FrameworkPropertyMetadataBoolean tulajdonságokként jelennek meg a jelzők bitenkénti kombinációja helyett, hogy a metaadat-jellemzők lekérdezése intuitívabb legyen.
Felülírja vagy új metaadatokat hoz létre?
Ha függőségi tulajdonságot örököl, lehetősége van a függőségi tulajdonság jellemzőinek módosítására a metaadatok felülírásával. Előfordulhat azonban, hogy nem mindig tudja elvégezni a függőségi tulajdonság forgatókönyvét a metaadatok felülírásával, és néha szükség van egy egyéni függőségi tulajdonság meghatározására az osztályban új metaadatokkal. Az egyéni függőségi tulajdonságok ugyanazokkal a képességekkel rendelkeznek, mint a WPF-típusok által definiált függőségi tulajdonságok. További információkért lásd: Egyéni függőségi tulajdonságok.
A függőségi tulajdonság egyik tulajdonsága, amelyet nem lehet felülbírálni, az érték típusa. Ha egy örökölt függőségi tulajdonságnak van a szükséges hozzávetőleges viselkedése, de a forgatókönyv más értéktípust igényel, fontolja meg egy egyéni függőségi tulajdonság implementálását. Előfordulhat, hogy a tulajdonságértékeket típuskonvertálással vagy más implementációval is összekapcsolhatja a származtatott osztályban.
Forgatókönyvek a metaadatok felülírására
A meglévő függőségi tulajdonság metaadatainak felülírására példaforgatókönyvek a következők:
Az alapértelmezett érték módosítása, ami gyakori forgatókönyv.
Tulajdonságmódosítási visszahívások módosítása vagy hozzáadása, ami akkor lehet szükséges, ha egy örökölt függőségi tulajdonság más függőségi tulajdonságokkal is együttműködik, mint az alap implementációja. A kódokat és a korrektúrákat egyaránt támogató programozási modellek egyik jellemzője, hogy a tulajdonságértékek bármilyen sorrendben beállíthatók. Ez a tényező befolyásolhatja a tulajdonságmódosítási visszahívások implementálását. További információért tekintse meg a függőségi tulajdonság visszahívásait és érvényesítését.
A WPF keretrendszertulajdonság metaadatainak beállításainak módosítása. A metaadat-beállítások általában egy új függőségi tulajdonság regisztrálása során vannak beállítva, de újra megadhatja őket OverrideMetadata vagy AddOwner hívásokban. A keretrendszertulajdonságok metaadatainak felülírásáról további információt a FrameworkPropertyMetadatamegadása című témakörben talál. A keretrendszertulajdonságok metaadat-beállításainak beállításáról a függőségi tulajdonság regisztrálásakor Egyéni függőségi tulajdonságokcímű témakörben olvashat.
Megjegyzés:
Mivel az érvényesítési visszahívások nem részei a metaadatoknak, a metaadatok felülírásával nem módosíthatók. További információ: Érvényesítési érték visszahívása.
Metaadatok felülírása
Új függőségi tulajdonság megvalósításakor a metaadatokat a Register metódus túlterhelésével állíthatja be. Ha az osztály függőségi tulajdonságot örököl, felülbírálhatja az örökölt metaadat-értékeket a OverrideMetadata metódussal. Előfordulhat például, hogy a OverrideMetadata használatával típusspecifikus értékeket állít be. További információ és kódminták: Függőségi tulajdonság metaadatainak felülbírálása.
A WPF függőségi tulajdonság például Focusable. A FrameworkElement osztály regisztrálja Focusable. A Control osztály a FrameworkElementszármazik, örökli a Focusable függőségi tulajdonságot, és felülbírálja az örökölt tulajdonság metaadatait. A felülbírálás az alapértelmezett tulajdonságértéket false értékről trueértékre módosítja, de megőrzi az egyéb örökölt metaadat-értékeket.
Mivel a legtöbb meglévő függőségi tulajdonság nem virtuális tulajdonság, az örökölt implementáció árnyékot ad a meglévő tagnak. Metaadat-jellemzők felülbírálása esetén az új metaadat-érték vagy az eredeti értéket váltja fel, vagy egyesítve lesznek:
Egy DefaultValueesetében az új érték felülírja a meglévő alapértelmezett értéket. Ha nem adja meg a
DefaultValue-t a felülbírálási metaadatokban, az érték a metaadatokkalDefaultValuemegadott legközelebbi őstől származik.Egy PropertyChangedCallbackesetében az alapértelmezett egyesítési logika egy táblában tárolja az összes
PropertyChangedCallbackértéket, és mindegyik meghívása egy tulajdonságmódosítással történt. A visszahívási sorrendet az osztálymélység határozza meg, ahol a hierarchiában az alaposztály által regisztrált visszahívás fut először.Egy CoerceValueCallbackesetében az új érték lecseréli a meglévő
CoerceValueCallbackértéket. Ha nem adja meg aCoerceValueCallback-t a felülbírálási metaadatokban, az érték a metaadatokkalCoerceValueCallbackmegadott legközelebbi őstől származik.
Megjegyzés:
Az alapértelmezett egyesítési logikát a Merge metódus implementálja. A függőségi tulajdonságot öröklő származtatott osztályban megadhat egyéni egyesítési logikát az adott osztály Merge felülírásával.
Tulajdonosként osztály hozzáadása
Ha egy másik osztályhierarchiában regisztrált függőségi tulajdonságot szeretne "örökölni", használja a AddOwner metódust. Ezt a módszert általában akkor használják, ha az osztály hozzáadása nem a függőségi tulajdonságot regisztráló típusból származik. A AddOwner hívásban a hozzáadó osztály típusspecifikus metaadatokat hozhat létre és rendelhet hozzá az örökölt függőségi tulajdonsághoz. Ahhoz, hogy a tulajdonságrendszer teljes résztvevője lehessen a kód és a korrektúra révén, a hozzáadó osztálynak implementálnia kell ezeket a nyilvános tagokat:
Függőségi tulajdonságazonosító mező. A függőségi tulajdonság azonosítójának értéke a
AddOwnerhívás visszatérési értéke. Ennek a mezőnekpublic static readonlytípusú DependencyProperty mezőnek kell lennie.CLR burkoló, amely
getéssethozzáférőket valósít meg. A tulajdonságburkoló használatával a függőségi tulajdonságok felhasználói ugyanúgy kaphatnak vagy állíthatnak be függőségi tulajdonságértékeket, mint bármely más CLR-tulajdonságot. Agetéssettartozékai DependencyObject.GetValue és DependencyObject.SetValue hívásokon keresztül kommunikálnak a mögöttes tulajdonságrendszerrel, paraméterként átadva a függőségi tulajdonság azonosítót. A burkoló ugyanúgy implementálható, mint egy egyéni függőségi tulajdonság regisztrálásakor. További információ: Egyéni függőség tulajdonságai
A AddOwner hívására szolgáló osztálynak ugyanazok a követelményei vannak, mint az örökölt függőségi tulajdonság objektummodelljének egy új egyéni függőségi tulajdonságot meghatározó osztályként való felfedésének. További információ: Tulajdonostípus hozzáadása függőségi tulajdonsághoz
Csatolt tulajdonság metaadatai
A WPF-ben a WPF-típusok legtöbb felhasználói felülettel kapcsolatos csatolt tulajdonsága függőségi tulajdonságként van implementálva. A függőségi tulajdonságokként implementált csatolt tulajdonságok támogatják a függőségi tulajdonság fogalmait, például a származtatott osztályok által felülbírálható metaadatokat. A csatolt tulajdonságok metaadatai általában nem különböznek a függőségi tulajdonságtól. Felülbírálhatja az örökölt csatolt tulajdonság alapértelmezett értékét, tulajdonságmódosítási visszahívásait és WPF-keretrendszertulajdonságait a felülbíráló osztály példányainál. További információ: Csatolt tulajdonság metaadatai
Megjegyzés:
Mindig használd a RegisterAttached-t olyan tulajdonságok regisztrálására, ahol Inherits-et határoztál meg a metaadatokban. Bár a tulajdonságérték öröklése úgy tűnhet, hogy nem gyorsítótárazott függőségi tulajdonságok esetében működik, a nem gyorsítótárazott tulajdonság értéköröklési viselkedése a futtatókörnyezeti fa bizonyos objektum-objektum osztásain keresztül nincs meghatározva. A Inherits tulajdonság nem releváns a nem csatlakoztatott tulajdonságok esetében. További információért lásd: RegisterAttached(String, Type, Type, PropertyMetadata)és a Inheritsmegjegyzései szakaszát.
Csatolt tulajdonság tulajdonosaként egy osztály hozzáadása
Ha egy csatolt tulajdonságot egy másik osztályból szeretne örökölni, de nem csatlakoztatott függőségi tulajdonságként szeretné elérhetővé tenni az osztályban:
Hívja meg a(z) AddOwner-t, hogy osztályát a csatolt függőségi tulajdonság tulajdonosaként adja meg.
Rendelje hozzá a
AddOwnerhívás visszatérési értékét egypublic static readonlymezőhöz, amely függőségi tulajdonságazonosítóként használható.Definiáljon egy CLR-burkolót, amely osztálytagként adja hozzá a tulajdonságot, és támogatja a nem csatlakoztatott tulajdonság használatát.
Lásd még
.NET Desktop feedback