Metadata vlastnosti rozhraní .NET Framework

Možnosti metadat vlastností architektury jsou hlášeny pro vlastnosti prvků objektů, které jsou považovány za na úrovni architektury 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í rozhraní jsou dotazována těmito systémy, aby určily vlastnosti konkrétního prvku specifické pro funkce.

Předpoklady

V tomto tématu se předpokládá, že rozumíte vlastnostem závislostí z pohledu příjemce existujících vlastností závislostí ve třídách WPF (Windows Presentation Foundation) a přečetli si přehled vlastností závislosti. Měli byste mít také oprávnění ke čtení metadat vlastností závislosti.

Co je komunikováno metadaty vlastností rozhraní

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

  • Vlastnosti rozložení sestav, 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í pro vytváření sestav, které ovlivňují nadřazený prvek elementu (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 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ů.

    Poznámka:

    Výraz "dědí" v kontextu hodnot vlastností něco specifického pro vlastnosti závislosti; to znamená, že podřízené elementy mohou dědit skutečnou hodnotu vlastnosti závislosti z nadřazených elementů z důvodu funkce wpF framework-level systému vlastností 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 naleznete v tématu Dědičnost hodnot vlastností.

  • Charakteristiky datových vazeb pro vytváření sestav (IsNotDataBindable, BindsTwoWayByDefault). Ve výchozím nastavení vlastnosti závislostí v rámci podporují datové vazby s jednosměrným chováním vazby. Datové vazby můžete zakázat, pokud pro ni vůbec nebyl žádný scénář (protože jsou určeny k flexibilnímu a rozšiřitelnému, ve výchozích rozhraních WPF API není mnoho příkladů takových vlastností). Vazby můžete nastavit tak, aby měly obousměrné výchozí hodnoty pro vlastnosti, které spojují chování ovládacího prvku mezi částmi jeho součástí (IsSubmenuOpen je příklad) nebo kde obousměrná vazba je běžný a očekávaný scénář pro uživatele (Text je příkladem). Změna metadat souvisejících s daty má vliv pouze na výchozí; pro každou vazbu, kterou lze vždy změnit. Podrobnosti o režimech vazeb a vazbách obecně najdete v tématu Přehled datových vazeb.

  • Generování sestav, zda mají být vlastnosti deníkovány aplikacemi nebo 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í prostřednictvím deníků služeb, včetně implementace deníku WPF, a obvykle je nastavena na uživatelské ovládací prvky, jako jsou výběry uživatelů v seznamech, které by měly být zachovány v rámci navigačních kroků. Informace o deníku naleznete v části Přehled navigace.

Čtení FrameworkPropertyMetadata

Každá z výše propojených vlastností jsou specifické vlastnosti, které FrameworkPropertyMetadata přidává do své okamžité základní třídy UIPropertyMetadata. Každá z těchto vlastností bude false ve výchozím nastavení. 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 FrameworkPropertyMetadataje . 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 od FrameworkPropertyMetadata vytvoření vlastní třídy vytváření sestav metadat s dalšími informacemi, které se přenášejí ve svých členech. Nebo můžete použít PropertyMetadata nebo UIPropertyMetadata sdělit stupeň podpory pro funkce vaší implementace.

U existujících vlastností (AddOwner nebo OverrideMetadata volání) byste měli vždy přepsat typ metadat používaný původní registrací.

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

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

  2. Použijte jeden z podpisů bez parametru flags a pak nastavte každou logickou vlastnost na FrameworkPropertyMetadatatrue hodnotu pro každou požadovanou 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; Logické vlastnosti jsou pro čtení i zápis, aby se toto chování zabránilo parametru flags a stále naplní metadata, ale metadata musí být před použitím vlastnosti účinně zapečetěna. Pokus o nastavení vlastností po vyžádání metadat tedy bude neplatnou operací.

Chování při slučování metadat vlastností architektury

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

Toto chování je implementováno pomocí Mergea lze přepsat na odvozené třídy metadat.

Viz také