Sdílet prostřednictvím


Metadata vlastností rámce

Možnosti metadat vlastností frameworku jsou hlášeny pro vlastnosti prvků objektů, které jsou považovány za na úrovni frameworku WPF v architektuře Windows Presentation Foundation (WPF). Obecně platí, že označení na úrovni architektury WPF zahrnuje, že funkce, jako je vykreslování, datové vazby a upřesnění systému vlastností, jsou zpracovávány rozhraními API prezentace WPF a spustitelnými soubory. Metadata vlastností frameworku jsou těmito systémy dotazována, aby určily vlastnosti konkrétních prvků specifické pro funkce.

Požadavky

Toto téma předpokládá, že jste obeznámeni s vlastnostmi závislostí systému WPF (Windows Presentation Foundation) z pohledu uživatele těchto existujících vlastností a že jste si přečetli Přehled vlastností závislostí. Měli byste si také přečíst metadata vlastnosti závislosti.

Co je sdělováno metadaty vlastností frameworku

Metadata vlastností architektury je možné rozdělit do následujících kategorií:

  • Vytváření sestav o vlastnostech rozložení, které ovlivňují prvek (AffectsArrange, AffectsMeasure, AffectsRender). Tyto příznaky můžete nastavit v metadatech, pokud tato vlastnost ovlivňuje tyto příslušné aspekty, a také implementujete MeasureOverride / ArrangeOverride metody ve vaší třídě, které poskytují specifické chování vykreslování a informace systému rozložení. Taková implementace by obvykle kontrolovala neplatné vlastnosti ve vlastnostech závislosti, kde některé z těchto vlastností rozložení byly pravdivé v metadatech vlastnosti, a pouze tyto neplatnosti by vyžadovaly žádost o nové předání rozložení.

  • Vlastnosti rozložení, které ovlivňují nadřazený prvek (AffectsParentArrange, AffectsParentMeasure). Některé příklady, kde jsou tyto příznaky nastaveny ve výchozím nastavení, jsou FixedPage.Left a Paragraph.KeepWithNext.

  • Inherits. 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ů.

    Poznámka

    Výraz "dědí" v kontextu hodnot vlastností znamená něco specifického pro závislé vlastnosti; to znamená, že podřízené elementy mohou dědit skutečnou hodnotu závislé vlastnosti z nadřazených elementů díky schopnosti systému vlastností WPF na úrovni rámce WPF. Nemá nic společného přímo se spravovaným typem kódu a dědičností členů prostřednictvím odvozených typů. Podrobnosti najdete v části Dědičnost hodnot vlastnosti.

  • Zpráva o charakteristikách datových vazeb (IsNotDataBindable, BindsTwoWayByDefault). Ve výchozím nastavení vlastnosti závislostí ve frameworku podporují datové vazby s chováním jednosměrné vazby. Datové vazby můžete zakázat, pokud vůbec neexistuje žádný scénář pro její použití (protože jsou určeny k tomu, aby byly flexibilní a rozšiřitelné, v základních API rozhraních WPF není mnoho příkladů takových vlastností). Můžete nastavit vazbu tak, aby měla obousměrné výchozí nastavení pro vlastnosti, které spojují chování ovládacího prvku mezi částmi jeho součástí (IsSubmenuOpen je příkladem) nebo kde obousměrná vazba je běžným a očekávaným scénářem pro uživatele (Text je příkladem). Změna metadat souvisejících s datovou vazbou ovlivňuje pouze výchozí nastavení. Pro jednotlivé vazby lze toto výchozí nastavení vždy změnit. Podrobnosti o režimech vazeb a vazbách obecně najdete v tématu Přehled datových vazeb.

  • Oznamování o tom, zda mají být vlastnosti zapisovány do deníku aplikacemi či službami, které podporují deníkování (Journal). U obecných prvků není ve výchozím nastavení deníkování povolené, ale pro určité ovládací prvky uživatelského vstupu je selektivně povoleno. Tato vlastnost je určena ke čtení službami záznamu deníku, včetně implementace záznamu v rámci WPF, a obvykle se nastavuje na uživatelské ovládací prvky, jako jsou uživatelské volby v seznamech, které by měly být zachovány během navigačních kroků. Informace o časopisu viz Přehled navigace.

Čtení FrameworkPropertyMetadata

Každá z výše propojených vlastností jsou specifické vlastnosti, které FrameworkPropertyMetadata přidá do své okamžité základní třídy UIPropertyMetadata. Každá z těchto vlastností bude ve výchozím nastavení false. Požadavek na metadata pro vlastnost, kde znalost hodnoty těchto vlastností je důležitá, by se měl pokusit přetypovat vrácená metadata na FrameworkPropertyMetadataa pak podle potřeby zkontrolovat hodnoty jednotlivých vlastností.

Určení metadat

Když vytvoříte novou instanci metadat pro účely použití metadat na novou registraci vlastnosti závislosti, máte na výběr, kterou třídu metadat použít: základní PropertyMetadata nebo některé odvozené třídy, jako je FrameworkPropertyMetadata. Obecně byste měli použít FrameworkPropertyMetadata, zejména pokud vaše vlastnost má jakoukoli interakci se systémem vlastností a funkcemi WPF, jako je rozložení a datová vazba. Další možností pro sofistikovanější scénáře je odvozovat z FrameworkPropertyMetadata, abyste vytvořili vlastní třídu pro reportování metadat, s dodatečnými informacemi zahrnutými ve svých členech. Nebo můžete použít PropertyMetadata nebo UIPropertyMetadata ke komunikaci míry podpory pro funkce vaší implementace.

U stávajících vlastností (AddOwner nebo OverrideMetadata) byste vždy měli přepsat typ metadat, který byl použit při původní registraci.

Pokud vytváříte instanci FrameworkPropertyMetadata, existují dva způsoby, jak naplnit metadata hodnotami pro konkrétní vlastnosti, které komunikují vlastnosti architektury:

  1. Použijte podpis konstruktoru FrameworkPropertyMetadata, který umožňuje parametr flags. Tento parametr by měl být vyplněn všemi požadovanými kombinovanými hodnotami příznaků výčtu FrameworkPropertyMetadataOptions.

  2. Použijte jeden z podpisů bez parametru flags a poté nastavte každou hlášenou booleovskou vlastnost na FrameworkPropertyMetadata na true pro každou očekávanou změnu charakteristiky. Pokud to uděláte, musíte tyto vlastnosti nastavit před vytvořením všech prvků s touto vlastností závislosti; Booleanové vlastnosti jsou pro čtení i zápis, aby toto chování umožnilo obejít parametr flags a přesto naplnily metadata, ale metadata se musí před použitím vlastnosti efektivně uzavřít. Pokus o nastavení vlastností po vyžádání metadat tedy bude neplatnou operací.

Chování při slučování metadat vlastnosti rámce

Při přepsání metadat vlastností rozhraní se různé charakteristiky metadat buď sloučí, nebo nahradí.

Toto chování je implementováno v Mergea lze jej přepsat v odvozených metadatových třídách.

Viz také