フレームワーク プロパティ メタデータ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.


このトピックは、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:

  • 要素に影響を与えるレポートAffectsArrangeレイアウトAffectsMeasureAffectsRenderプロパティ ( , )Reporting layout properties that affect an element (AffectsArrange, AffectsMeasure, AffectsRender). プロパティがそれぞれの側面に影響を与える場合、およびレイアウト システムに特定のMeasureOverride / ArrangeOverrideレンダリング動作と情報を提供するクラスのメソッドを実装している場合は、メタデータにこれらのフラグを設定できます。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.

  • Inherits.Inherits. 既定では、依存関係プロパティは値を継承しません。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.

  • データ バインディング特性IsNotDataBindable( BindsTwoWayByDefault、 ) のレポートを作成します。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に追加の情報を持つ独自のメタデータ レポート クラスを作成するから派生することです。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. または、実装のPropertyMetadata機能UIPropertyMetadataのサポートの程度を使用するか、または伝達することができます。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. パラメーターをFrameworkPropertyMetadata許可するコンストラクターシグネチャをflags使用します。Use 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パラメータを指定せずに署名のいずれかを使用し、各レポートブールプロパティを、必要な特性FrameworkPropertyMetadata変更trueごとにに設定します。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