Metadata vlastností rozhraní (WPF .NET)

Možnosti metadat vlastností architektury pro vlastnosti závislostí můžete nastavit na úrovni architektury WPF (Windows Presentation Foundation). Označení na úrovni architektury WPF platí, když rozhraní API prezentace WPF a spustitelné soubory zpracovávají vykreslování a datová vazba. Prezentační rozhraní API a spustitelné soubory dotazují FrameworkPropertyMetadata vlastnost závislosti.

Důležité

Dokumentace k desktopové příručce pro .NET 7 a .NET 6 se právě připravuje.

Předpoklady

V článku se předpokládá základní znalost vlastností závislostí a že jste si přečetli přehled vlastností závislostí. Pokud chcete postupovat podle příkladů v tomto článku, pomůže vám to, pokud znáte jazyk XAML (Extensible Application Markup Language) a víte, jak psát aplikace WPF.

Kategorie metadat vlastností architektury

FrameworkPropertyMetadata spadá do těchto kategorií:

  • Metadata, která ovlivňují rozložení prvku, konkrétně AffectsArrangepříznaky , AffectsMeasurea AffectsRender metadata. Tyto příznaky můžete nastavit, pokud implementace vlastnosti závislosti ovlivňuje vizuální aspekt a implementujete MeasureOverride nebo ArrangeOverride je implementujete ve třídě. ArrangeOverride Metody MeasureOverride poskytují informace o chování specifické pro implementaci a vykreslování do systému rozložení. Když AffectsArrange, AffectsMeasurenebo AffectsRender jsou nastaveny na true metadata vlastnosti závislosti a jeho efektivní hodnoty změny, WPF systém vlastností zahájí požadavek na zneplatnění vizuálů elementu k aktivaci překreslení.

  • Metadata, která ovlivňují rozložení nadřazeného prvku elementu, konkrétně AffectsParentArrange příznaky metadat a AffectsParentMeasure metadat. Příklady vlastností závislostí WPF, které tyto příznaky nastavují, jsou FixedPage.Left a Paragraph.KeepWithNext.

  • Metadata dědičnosti hodnot vlastností, konkrétně Inherits příznaky a OverridesInheritanceBehavior příznaky metadat. Ve výchozím nastavení vlastnosti závislostí nedědí hodnoty. OverridesInheritanceBehavior umožňuje také cestu dědičnosti do vizuálního stromu, což je nezbytné pro některé scénáře vytváření ovládacích prvků. Další informace naleznete v tématu Dědičnost hodnot vlastností.

    Poznámka:

    Termín "dědí" v kontextu hodnot vlastností je specifický pro vlastnosti závislosti a nesouvisí přímo se spravovanými typy kódu a dědičností členů prostřednictvím odvozených typů. V kontextu vlastností závislosti to znamená, že podřízené prvky mohou dědit hodnoty vlastností závislostí z nadřazených prvků.

  • Metadata datové vazby, konkrétně BindsTwoWayByDefault příznaky metadat a IsNotDataBindable metadat. Ve výchozím nastavení vlastnosti závislostí v rozhraní WPF podporují jednosměrnou vazbu. Zvažte nastavení obousměrné vazby jako výchozí pro vlastnosti, které stav sestavy a které lze upravit pomocí akce uživatele, například IsSelected. Zvažte také nastavení obousměrné vazby jako výchozí, když uživatelé ovládacího prvku očekávají implementaci vlastnosti, například TextBox.Text. BindsTwoWayByDefault má vliv pouze na výchozí režim vazby. Pokud chcete upravit směr toku dat vazby, nastavte Binding.Mode. Datovou vazbu můžete IsNotDataBindable zakázat, když pro ni neexistuje žádný případ použití. Další informace o datových vazbách najdete v tématu Přehled datových vazeb.

  • Zaznamenávání metadat, konkrétně Journal příznak metadat. Výchozí hodnota příznaku Journal je pouze true pro některé vlastnosti závislosti, například SelectedIndex. Ovládací prvky uživatelského vstupu by měly nastavit Journal příznak pro vlastnosti, jejichž hodnoty obsahují výběry uživatelů, které je potřeba uložit. Příznak Journal čte aplikace nebo služby, které podporují deníkování, včetně služeb deníku WPF. Informace o ukládání navigačních kroků najdete v části Přehled navigace.

FrameworkPropertyMetadata odvozuje přímo od UIPropertyMetadataa implementuje příznaky, které jsou zde popsány. Pokud nejsou výslovně nastaveny, FrameworkPropertyMetadata příznaky mají výchozí hodnotu false.

Čtení FrameworkPropertyMetadata

Pokud chcete načíst metadata vlastnosti závislosti, zavolejte GetMetadata identifikátor DependencyProperty . Volání GetMetadata vrátí PropertyMetadata objekt. Pokud potřebujete dotazovat hodnoty metadat architektury přetypování PropertyMetadata na FrameworkPropertyMetadata.

Určení frameworkPropertyMetadata

Při registraci vlastnosti závislosti máte možnost vytvořit a přiřadit k ní metadata. Objekt metadat, který přiřadíte, může být PropertyMetadata nebo jedna z jeho odvozených tříd, například FrameworkPropertyMetadata. Zvolte FrameworkPropertyMetadata vlastnosti závislostí, které se spoléhají na rozhraní API prezentace WPF a spustitelné soubory pro vykreslování a datové vazby. Pokročilejší možností je odvodit z FrameworkPropertyMetadata vytvoření vlastní třídy vytváření sestav metadat s dalšími příznaky. Nebo můžete použít UIPropertyMetadata pro vlastnosti jiné architektury, které ovlivňují vykreslování uživatelského rozhraní.

I když jsou možnosti metadat obvykle nastaveny během registrace nové vlastnosti závislosti, můžete je označit nebo OverrideMetadataAddOwner volat. Při přepsání metadat vždy přepište stejným typem metadat, který byl použit během registrace vlastnosti.

Vlastnosti, které jsou vystaveny FrameworkPropertyMetadata , jsou někdy označovány jako příznaky. Pokud vytváříte FrameworkPropertyMetadata instanci, existují dva způsoby, jak naplnit hodnoty příznaku:

  1. Nastavte příznaky u instance typu výčtu FrameworkPropertyMetadataOptions . FrameworkPropertyMetadataOptions umožňuje zadat příznaky metadat v bitové kombinaci OR. Potom vytvořte instanci FrameworkPropertyMetadata pomocí konstruktoru FrameworkPropertyMetadataOptions , který má parametr, a předejte instanci FrameworkPropertyMetadataOptions . Chcete-li změnit příznaky metadat po předání FrameworkPropertyMetadataOptions do konstruktoru FrameworkPropertyMetadata , změňte odpovídající vlastnost v nové FrameworkPropertyMetadata instanci. Pokud například nastavíte FrameworkPropertyMetadataOptions.NotDataBindable příznak, můžete ho vrátit zpět nastavením FrameworkPropertyMetadata.IsNotDataBindable na falsehodnotu .

  2. FrameworkPropertyMetadata Vytvořte instanci pomocí konstruktoru, který nemá FrameworkPropertyMetadataOptions parametr, a pak nastavte příslušné Boolean příznaky na FrameworkPropertyMetadata. Před přidružením FrameworkPropertyMetadata instance k vlastnosti závislosti nastavte hodnoty příznaku, jinak získáte hodnotu InvalidOperationException.

Chování přepsání metadat

Při přepsání metadat vlastností architektury se změněné hodnoty metadat buď nahradí, nebo se sloučí s původními hodnotami:

  • PropertyChangedCallbackVýchozí logika sloučení uchovává předchozí PropertyChangedCallback hodnoty v tabulce a všechny jsou vyvolány při změně vlastnosti. Pořadí zpětného volání je určeno hloubkou třídy, kdy se nejprve spustí zpětné volání registrované základní třídou v hierarchii. Zděděné zpětná volání se spouští pouze jednou a vlastní je třída, která je přidala do metadat.

  • DefaultValueNová hodnota nahradí stávající výchozí hodnotu. Pokud v metadatech přepsání nezadáte DefaultValue a pokud má existující FrameworkPropertyMetadataInherits nastavený příznak, výchozí hodnota pochází z nejbližšího nadřazeného objektu, který je zadaný DefaultValue v metadatech.

  • CoerceValueCallbackNová hodnota nahradí existující CoerceValueCallback hodnotu. Pokud nezadáte CoerceValueCallback v metadatech přepsání, hodnota pochází z nejbližšího nadřazeného prvku v řetězci dědičnosti, který zadal .CoerceValueCallback

  • U FrameworkPropertyMetadata nezděděných příznaků můžete přepsat výchozí false hodnotu true hodnotou. Můžete však přepsat true pouze hodnotu s false hodnotou pro Inherits, Journal, OverridesInheritanceBehaviora SubPropertiesDoNotAffectRender.

Poznámka:

Metoda implementuje výchozí logiku Merge sloučení. Vlastní logiku sloučení můžete zadat v odvozené třídě, která dědí vlastnost závislosti přepsáním Merge v této třídě.

Viz také