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.
Požadavky
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
MetodyMeasureOverride
poskytují informace o chování specifické pro implementaci a vykreslování do systému rozložení. KdyžAffectsArrange
,AffectsMeasure
neboAffectsRender
jsou nastaveny natrue
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ůžeteIsNotDataBindable
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 pouzetrue
pro některé vlastnosti závislosti, například SelectedIndex. Ovládací prvky uživatelského vstupu by měly nastavitJournal
příznak pro vlastnosti, jejichž hodnoty obsahují výběry uživatelů, které je potřeba uložit. PříznakJournal
č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 OverrideMetadata AddOwner 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:
Nastavte příznaky u instance typu výčtu FrameworkPropertyMetadataOptions .
FrameworkPropertyMetadataOptions
umožňuje zadat příznaky metadat v bitové kombinaci OR. Potom vytvořte instanciFrameworkPropertyMetadata
pomocí konstruktoruFrameworkPropertyMetadataOptions
, který má parametr, a předejte instanciFrameworkPropertyMetadataOptions
. 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 nafalse
hodnotu .FrameworkPropertyMetadata
Vytvořte instanci pomocí konstruktoru, který nemáFrameworkPropertyMetadataOptions
parametr, a pak nastavte příslušné Boolean příznaky naFrameworkPropertyMetadata
. Před přidruženímFrameworkPropertyMetadata
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áteCoerceValueCallback
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
hodnotutrue
hodnotou. Můžete však přepsattrue
pouze hodnotu sfalse
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é
.NET Desktop feedback