Megosztás a következőn keresztül:


Keretrendszertulajdonság metaadatai

A keretrendszertulajdonság metaadat-beállításait a Windows Presentation Foundation (WPF) keretrendszer szintjén állíthatja be a függőségi tulajdonságokhoz. A WPF keretrendszerszint-megjelölés akkor érvényes, ha a WPF-bemutató API-k és a végrehajtható fájlok kezelik a renderelést és az adatkötést. A bemutató API-k és a végrehajtható fájlok lekérdezik a függőségi tulajdonság „FrameworkPropertyMetadata”-t.

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.

Keretrendszertulajdonság metaadatainak kategóriái

FrameworkPropertyMetadata az alábbi kategóriákba sorolhatók:

  • Az elemek elrendezését befolyásoló metaadatok, különösen a AffectsArrange, AffectsMeasureés AffectsRender metaadat-jelzők. Ez a jelölőket akkor állíthatja be, ha a függőségi tulajdonság implementálása hatással van a vizuális megjelenítésre, és az osztályában implementálja a MeasureOverride vagy ArrangeOverride jelöléseket. A MeasureOverride és ArrangeOverride metódusok implementációspecifikus viselkedést és renderelési információkat biztosítanak az elrendezési rendszer számára. Ha a függőségi tulajdonság metaadataiban a AffectsArrange, AffectsMeasurevagy AffectsRender értéke true-ra van állítva, és annak tényleges értéke megváltozik, a WPF tulajdonságrendszer kezdeményezni fogja az elem vizuális elemeinek érvénytelenítését az újrarajzolás érdekében.

  • Az elemek szülőelemének elrendezését befolyásoló metaadatok, különösen a AffectsParentArrange és AffectsParentMeasure metaadat-jelzők. Példák a WPF függőségi tulajdonságaira, amelyek beállítják ezeket a jelzőket, FixedPage.Left és Paragraph.KeepWithNext.

  • A tulajdonságértékek öröklési metaadatai, különösen a Inherits és OverridesInheritanceBehavior metaadat-jelzők. Alapértelmezés szerint a függőségi tulajdonságok nem öröklik az értékeket. OverridesInheritanceBehavior lehetővé teszi, hogy az öröklési út egy vizuális fába is eljusson, ami bizonyos vezérlő összeállítási forgatókönyvekhez szükséges. További információ: Tulajdonságérték öröklése.

    Megjegyzés:

    A tulajdonságértékek kontextusában az "öröklődik" kifejezés a függőségi tulajdonságokra jellemző, és nem kapcsolódik közvetlenül a felügyelt kódtípusokhoz és a tagörökléshez származtatott típusok használatával. A függőségi tulajdonságok kontextusában ez azt jelenti, hogy a gyermekelemek örökölhetik a függőségi tulajdonság értékeit a szülőelemektől.

  • Adatkötési metaadatok, különösen a BindsTwoWayByDefault és IsNotDataBindable metaadat-jelzők. Alapértelmezés szerint a WPF-keretrendszer függőségi tulajdonságai támogatják az egyirányú kötést. Fontolja meg a kétirányú kötés alapértelmezett beállítását azon tulajdonságok esetében, amelyeknél a jelentés állapota és a módosíthatók felhasználói művelettel, például IsSelected. Érdemes lehet alapértelmezettként beállítani a kétirányú kötést is, ha egy vezérlő felhasználói egy tulajdonság implementálását várják, például TextBox.Text. BindsTwoWayByDefault csak az alapértelmezett kötési módot érinti. A kötés adatfolyam-irányának szerkesztéséhez állítsa Binding.Mode. Az IsNotDataBindable használatával letilthatja az adatkötést, ha nincs rá használati eset. További információ az adatkötésekről: Adatkötések áttekintése.

  • Metaadatok naplózása, különösen a Journal metaadat-jelző. A Journal jelző alapértelmezett értéke csak bizonyos függőségi tulajdonságok esetében true, például SelectedIndex. A felhasználói beviteli vezérlőknek meg kell adni a Journal jelölőt azon tulajdonságok esetében, amelyek értékei tárolják a tárolni kívánt felhasználói kijelöléseket. A Journal jelzőt olyan alkalmazások vagy szolgáltatások olvassák, amelyek támogatják a naplózást, beleértve a WPF-naplózási szolgáltatásokat is. A navigációs lépések tárolásáról további információt a Navigáció áttekintése című témakörben talál.

FrameworkPropertyMetadata közvetlenül a UIPropertyMetadataszármazik, és implementálja az itt tárgyalt zászlókat. Ha nincs külön beállítva, FrameworkPropertyMetadata jelzők alapértelmezett értéke false.

Olvasás a FrameworkPropertyMetadata-ból

Egy függőségi tulajdonság metaadatainak lekéréséhez hívja meg GetMetadata a DependencyProperty azonosítóján. A GetMetadata hívás egy PropertyMetadata objektumot ad vissza. Ha le kell kérdeznie a keretrendszer metaadat-értékeit, alakítsa át PropertyMetadata-t FrameworkPropertyMetadata-re.

FrameworkPropertyMetadata megadása

Függőségi tulajdonság regisztrálásakor lehetősége van metaadatok létrehozására és hozzárendelésére. A hozzárendelt metaadat-objektum lehet PropertyMetadata vagy annak egyik származtatott osztálya, például FrameworkPropertyMetadata. Válassza a FrameworkPropertyMetadata olyan függőségi tulajdonságokhoz, amelyek WPF-bemutató API-kra, valamint renderelésre és adatkötésre használható végrehajtható fájlokra támaszkodnak. Egy fejlettebb lehetőség, ha FrameworkPropertyMetadata-ból származtat egy testreszabott metaadat-jelentési osztályt több jelzővel ellátott. Vagy használhat UIPropertyMetadata olyan nem keretrendszerbeli tulajdonságokhoz, amelyek befolyásolják a felhasználói felület renderelését.

Bár 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, újra megadhatja őket OverrideMetadata vagy AddOwner hívásokban. A metaadatok felülbírálásakor mindig ugyanazzal a metaadattípussal kell felülbírálni, mint a tulajdonságregisztráció során.

A FrameworkPropertyMetadata által közzétett tulajdonságjellemzőket néha jelzőkneknevezik. Ha egy FrameworkPropertyMetadata-példányt hoz létre, kétféleképpen töltheti fel a jelzőértékeket:

  1. Állítsa be a jelzőket a FrameworkPropertyMetadataOptions enumerálási típus egy példányán. FrameworkPropertyMetadataOptions lehetővé teszi a metaadat-jelzők bitenkénti VAGY kombinációban történő megadását. Példányosítsa a FrameworkPropertyMetadata-t egy FrameworkPropertyMetadataOptions paraméterrel rendelkező konstruktor használatával, és adja át a FrameworkPropertyMetadataOptions példányát. Ha módosítani szeretné a metaadat-jelzőket, miután átadta FrameworkPropertyMetadataOptions a FrameworkPropertyMetadata konstruktornak, módosítsa a megfelelő tulajdonságot az új FrameworkPropertyMetadata-példányon. Ha például a FrameworkPropertyMetadataOptions.NotDataBindable jelzőt állítja be, visszavonhatja azt úgy, hogy FrameworkPropertyMetadata.IsNotDataBindablefalseértékre állítja.

  2. Példányosítsa a(z) FrameworkPropertyMetadata-t olyan konstruktorral, amely nem rendelkezik FrameworkPropertyMetadataOptions paraméterrel, majd állítsa be a vonatkozó Boolean jelzőket a(z) FrameworkPropertyMetadata-ra. Állítsa be a jelölőértékeket, mielőtt függőségi tulajdonsággal társítja a FrameworkPropertyMetadata-példányt, különben InvalidOperationExceptionkap.

Metaadatok felülbírálásának viselkedése

A keretrendszertulajdonság metaadatainak felülbírálásakor a módosított metaadat-értékek lecserélik vagy egyesülnek az eredeti értékekkel:

  • Egy PropertyChangedCallbackesetében az alapértelmezett egyesítési logika megtartja a tábla korábbi PropertyChangedCallback értékeit, és a rendszer mindet meghívja egy tulajdonságmódosítás során. 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. Az örökölt visszahívások csak egyszer futnak le, és annak az osztálynak a tulajdonai, amelyik felvette őket a metaadatokba.

  • Egy DefaultValueesetében az új érték felülírja a meglévő alapértelmezett értéket. Amennyiben nem adsz meg DefaultValue-t a felülíró metaadatokban, és a meglévő FrameworkPropertyMetadata rendelkezik a Inherits jelzővel, akkor az alapértelmezett érték a legközelebbi olyan elődtől származik, amely megadta DefaultValue-at a metaadatokban.

  • Egy CoerceValueCallbackesetében az új érték lecserél egy meglévő CoerceValueCallback értéket. Ha nem ad meg CoerceValueCallback a felülbírálási metaadatokban, az érték a CoerceValueCallbackmegadott öröklési lánc legközelebbi ősétől származik.

  • Az FrameworkPropertyMetadata nem öröklő jelzők esetében felülbírálhatja az alapértelmezett false értéket egy true értékkel. Azonban csak akkor bírálhatja felül a true értéket false értékkel, ha az a Inherits, Journal, OverridesInheritanceBehaviorvagy SubPropertiesDoNotAffectRender.

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.

Lásd még