フレームワーク プロパティ メタデータFramework Property Metadata

フレームワーク プロパティ メタデータのオプションは、Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) アーキテクチャの WPF フレームワーク レベルにあると見なされるオブジェクト要素のプロパティに対して報告されます。Framework property metadata options are reported for the properties of object elements considered to be at the WPF framework level in the Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) architecture. 一般に、WPF フレームワークレベルの指定では、表示、データバインディング、プロパティシステムのWPFWPF調整などの機能がプレゼンテーション api と実行可能ファイルによって処理されます。In general the WPF framework-level designation entails that features such as rendering, data binding, and property system refinements are handled by the WPFWPF presentation APIs and executables. フレームワーク プロパティ メタデータがこれらのシステムによって照会されて、特定の要素プロパティに対する機能固有の特性が決まります。Framework property metadata is queried by these systems to determine feature-specific characteristics of particular element properties.

必須コンポーネントPrerequisites

このトピックでは、ユーザーが Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) クラスの既存の依存関係プロパティの使用という観点から依存関係プロパティを理解し、「依存関係プロパティの概要」トピックを通読していることを前提としています。This topic assumes that you understand dependency properties from the perspective of a consumer of existing dependency properties on Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) classes, and have read the Dependency Properties Overview. また、「依存関係プロパティのメタデータ」を読んでいる必要もあります。You should also have read Dependency Property Metadata.

フレームワーク プロパティ メタデータによる通知内容What Is Communicated by Framework Property Metadata

フレームワーク プロパティ メタデータは、次のように分類できます。Framework property metadata can be divided into the following categories:

  • 要素 (AffectsArrangeAffectsMeasureAffectsRender) に影響を与えるレポートレイアウトプロパティ。Reporting layout properties that affect an element (AffectsArrange, AffectsMeasure, AffectsRender). プロパティがそれぞれの側面に影響する場合は、メタデータにこれらのフラグを設定できますMeasureOverride 。また、クラスのArrangeOverrideメソッドを実装 / して、特定のレンダリング動作と情報をレイアウトに提供することもできます。system.You might set these flags in metadata if the property affects those respective aspects, and you are also implementing the MeasureOverride / ArrangeOverride methods in your class to supply specific rendering behavior and information to the layout system. 通常、そのような実装では、依存関係プロパティのメタデータでこれらのレイアウト プロパティのいずれかが true であると、プロパティの無効化があるかどうかがチェックされます。無効化があった場合にのみ、新しいレイアウト パスの要求が必要となります。Typically, such an implementation would check for property invalidations in dependency properties where any of these layout properties were true in the property metadata, and only those invalidations would necessitate requesting a new layout pass.

  • 要素の親要素 (AffectsParentArrangeAffectsParentMeasure) に影響を与えるレポートレイアウトプロパティ。Reporting layout properties that affect the parent element of an element (AffectsParentArrange, AffectsParentMeasure). これらのフラグが既定で設定される例FixedPage.LeftParagraph.KeepWithNextして、とがあります。Some examples where these flags are set by default are FixedPage.Left and Paragraph.KeepWithNext.

  • InheritsInherits. 既定では、依存関係プロパティは値を継承しません。By default, dependency properties do not inherit values. OverridesInheritanceBehavior継承の経路をビジュアルツリーにも移動できるようにします。これは、いくつかのコントロールの複合シナリオに必要です。OverridesInheritanceBehavior allows the pathway of inheritance to also travel into a visual tree, which is necessary for some control compositing scenarios.

    注意

    プロパティ値のコンテキストにおける "継承" という用語は、依存関係プロパティに固有の事項を意味します。つまり、WPFWPF プロパティ システムの WPF フレームワーク レベルの機能によって、実際の依存関係プロパティ値を子要素が親要素から継承できることを意味します。The term "inherits" in the context of property values means something specific for dependency properties; it means that child elements can inherit the actual dependency property value from parent elements because of a WPF framework-level capability of the WPFWPF property system. 派生型を通じたマネージド コードの型およびメンバーの継承とは直接関係はありません。It has nothing to do directly with managed code type and members inheritance through derived types. 詳細については、「プロパティ値の継承」を参照してください。For details, see Property Value Inheritance.

  • レポートデータバインディング特性 (IsNotDataBindableBindsTwoWayByDefault)。Reporting data binding characteristics (IsNotDataBindable, BindsTwoWayByDefault). 既定では、フレームワークの依存関係プロパティは、一方向のバインディング動作を持つデータ バインディングをサポートします。By default, dependency properties in the framework support data binding, with a one-way binding behavior. データバインディングを無効にすることもできます (柔軟性と拡張性を目的としているため、既定WPFWPFの api ではこのようなプロパティの例は多数ありません)。You might disable data binding if there were no scenario for it whatsoever (because they are intended to be flexible and extensible, there aren't many examples of such properties in the default WPFWPF APIs). コンポーネント間でコントロールの動作を関連付けるプロパティ (IsSubmenuOpenなど) や、ユーザーにとって双方向のバインディングが一般的で期待されるシナリオであるプロパティ (Textが例) に対して、バインディングを双方向に設定することもできます。You might set binding to have a two-way default for properties that tie together a control's behaviors amongst its component pieces (IsSubmenuOpen is an example) or where two-way binding is the common and expected scenario for users (Text is an example). データ バインディング関連のメタデータを変更した場合に影響を受けるのは既定値だけです。この既定値は、バインディングごとにいつでも変更できます。Changing the data binding–related metadata only influences the default; on a per-binding basis that default can always be changed. バインディング モードおよびバインディング全般の詳細については、「データ バインドの概要」を参照してください。For details on the binding modes and binding in general, see Data Binding Overview.

  • ジャーナリングをサポートするアプリケーションまたはサービスによってプロパティをジャーナルJournal処理する必要があるかどうかを報告する ()。Reporting whether properties should be journaled by applications or services that support journaling (Journal). 一般的な要素に対しては、ジャーナリングは既定で有効になりませんが、特定のユーザー入力コントロールに対しては選択的に有効になります。For general elements, journaling is not enabled by default, but it is selectively enabled for certain user input controls. これは、WPFWPF のジャーナリングの実装を含む、ジャーナリング サービスによって読み取られるプロパティです。通常は、複数のナビゲーション ステップにわたって永続化する必要があるユーザー コントロール (一覧におけるユーザー選択など) に設定します。This property is intended to be read by journaling services including the WPFWPF implementation of journaling, and is typically set on user controls such as user selections within lists that should be persisted across navigation steps. ジャーナリングの詳細については、「ナビゲーションの概要」を参照してください。For information about the journal, see Navigation Overview.

FrameworkPropertyMetadata の読み取りReading FrameworkPropertyMetadata

上にリンクされた各プロパティは、が直接FrameworkPropertyMetadataの基底クラスUIPropertyMetadataに追加する特定のプロパティです。Each of the properties linked above are the specific properties that the FrameworkPropertyMetadata adds to its immediate base class UIPropertyMetadata. これらのプロパティの既定値はいずれも false です。Each of these properties will be false by default. これらのプロパティの値がわかっているプロパティのメタデータ要求では、返されたメタデータをFrameworkPropertyMetadataにキャストし、必要に応じて個々のプロパティの値を確認する必要があります。A metadata request for a property where knowing the value of these properties is important should attempt to cast the returned metadata to FrameworkPropertyMetadata, and then check the values of the individual properties as needed.

メタデータの指定Specifying Metadata

新しい依存関係プロパティの登録にメタデータを適用するために新しいメタデータインスタンスを作成する場合、使用するメタデータクラスを選択できますPropertyMetadata 。これには、基本FrameworkPropertyMetadataクラスまたはその他の派生クラス (など) があります。When you create a new metadata instance for purposes of applying metadata to a new dependency property registration, you have the choice of which metadata class to use: the base PropertyMetadata or some derived class such as FrameworkPropertyMetadata. 一般に、プロパティにプロパティFrameworkPropertyMetadataシステムおよびレイアウトやデータバインディングなどの関数とWPFWPFの相互作用がある場合は、特にを使用する必要があります。In general, you should use FrameworkPropertyMetadata, particularly if your property has any interaction with property system and WPFWPF functions such as layout and data binding. より高度なシナリオを実現するためのもうFrameworkPropertyMetadata 1 つのオプションは、から派生させ、メンバーに追加情報を含む独自のメタデータレポートクラスを作成することです。Another option for more sophisticated scenarios is to derive from FrameworkPropertyMetadata to create your own metadata reporting class with extra information carried in its members. または、またPropertyMetadataUIPropertyMetadataを使用して、実装の機能のサポートレベルを伝達することもできます。Or you might use PropertyMetadata or UIPropertyMetadata to communicate the degree of support for features of your implementation.

既存のプロパティ (AddOwnerまたOverrideMetadataはを呼び出す場合) の場合は、常に元の登録で使用されるメタデータ型でオーバーライドする必要があります。For existing properties (AddOwner or OverrideMetadata call), you should always override with the metadata type used by the original registration.

FrameworkPropertyMetadataインスタンスを作成する場合は、次の2つの方法で、フレームワークのプロパティ特性を伝える特定のプロパティの値をそのメタデータに設定できます。If you are creating a FrameworkPropertyMetadata instance, there are two ways to populate that metadata with values for the specific properties that communicate the framework property characteristics:

  1. パラメーターをflags許可するコンストラクターシグネチャを使用します。FrameworkPropertyMetadataUse the FrameworkPropertyMetadata constructor signature that allows a flags parameter. このパラメーターには、 FrameworkPropertyMetadataOptions列挙フラグのすべての必要な結合値を入力する必要があります。This parameter should be filled with all desired combined values of the FrameworkPropertyMetadataOptions enumeration flags.

  2. パラメーターをflags指定せずにいずれかの署名を使用し、必要な特性のtrue変更ごとにに対してFrameworkPropertyMetadata各レポートのブール型プロパティをに設定します。Use one of the signatures without a flags parameter, and then set each reporting Boolean property on FrameworkPropertyMetadata to true for each desired characteristic change. この場合、この依存関係プロパティを持つすべての要素の構築前に、これらのプロパティを設定する必要があります。flags パラメーターを使用せずに引き続きメタデータを読み込めるよう、これらのブール型プロパティは読み書き可能な状態ですが、プロパティの使用前にメタデータを事実上シールする必要があります。If you do this, you must set these properties before any elements with this dependency property are constructed; the Boolean properties are read-write in order to allow this behavior of avoiding the flags parameter and still populate the metadata, but the metadata must become effectively sealed before property use. そのため、メタデータの要求後にこれらのプロパティを設定しようとすると、無効な操作となります。Thus, attempting to set the properties after metadata is requested will be an invalid operation.

フレームワーク プロパティ メタデータのマージ動作Framework Property Metadata Merge Behavior

フレームワーク プロパティ メタデータをオーバーライドすると、さまざまなメタデータ特性がマージされるか置き換えられます。When you override framework property metadata, the different metadata characteristics are either merged or replaced.

この動作はによっMergeて実装され、派生メタデータクラスでオーバーライドできます。This behavior is implemented by Merge, and can be overridden on derived metadata classes.

関連項目See also