Sdílet prostřednictvím


Metadata vlastností rámce

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

Požadavky

Článek 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í rámce

FrameworkPropertyMetadata spadá do těchto kategorií:

  • Metadata, která ovlivňují rozložení prvku, konkrétně příznaky metadata AffectsArrange, AffectsMeasure a AffectsRender. Tyto příznaky můžete nastavit, pokud implementace vlastnosti závislosti ovlivňuje vizuální aspekt a implementujete MeasureOverride nebo ArrangeOverride ve své třídě. Metody MeasureOverride a ArrangeOverride 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, například AffectsParentArrange a AffectsParentMeasure metadata příznaky. 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ě příznaky metadat Inherits a OverridesInheritanceBehavior. Ve výchozím nastavení vlastnosti závislostí nedědí hodnoty. OverridesInheritanceBehavior také umožňuje, aby cesta dědičnosti vedla do vizuálního stromu, což je nezbytné pro některé scénáře skládání ovládacích prvků. Další informace naleznete v tématu Dědičnost hodnoty vlastnosti.

    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ě příznaky metadat BindsTwoWayByDefault a IsNotDataBindable. 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é hlásí stav 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ě příznak metadat Journal. 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 přehledu 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 na identifikátor DependencyProperty. Volání GetMetadata vrátí PropertyMetadata objekt. Pokud potřebujete provádět dotazy na hodnoty metadat frameworku, přetypujte 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 pro vlastnosti závislosti, které se spoléhají na prezentační rozhraní API WPF a komponenty pro vykreslování a datové vazby. Pokročilejší možností je odvodit z FrameworkPropertyMetadata vlastní třídu pro sestavy 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 znovu nastavit pomocí volání OverrideMetadata nebo AddOwner. 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ý přijímá parametr, a předejte mu svou 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:

  • PropertyChangedCallback Výchozí logika sloučení uchovává předchozí hodnoty PropertyChangedCallback v tabulce a všechny jsou aktivová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. Děděná zpětná volání se provádějí pouze jednou a jsou vlastněna třídou, která je přidala do metadat.

  • U DefaultValuenahradí nová hodnota stávající výchozí hodnotu. Pokud v metadatech přepsání nezadáte DefaultValue a pokud má existující FrameworkPropertyMetadata nastavený příznak Inherits, pak výchozí hodnota pochází z nejbližšího nadřazeného objektu, který specifikoval 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 hodnotu hodnotou false pro Inherits, Journal, OverridesInheritanceBehavior, a SubPropertiesDoNotAffectRender.

Poznámka:

Výchozí logika sloučení je implementována metodou Merge. Vlastní logiku sloučení můžete zadat v odvozené třídě s děděnou vlastností závislosti, přepsáním Merge v této třídě.

Viz také