次の方法で共有


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

フレームワーク プロパティ メタデータ オプションは、Windows Presentation Foundation (WPF) アーキテクチャの WPF フレームワーク レベルにあると見なされるオブジェクト要素のプロパティについて報告されます。 一般に、WPF フレームワーク レベルの指定では、レンダリング、データ バインディング、プロパティ システムの絞り込みなどの機能は、WPF プレゼンテーション API と実行可能ファイルによって処理されます。 フレームワークプロパティメタデータは、特定の要素プロパティの特徴固有の特性を決定するために、これらのシステムによって照会されます。

前提 条件

このトピックでは、Windows Presentation Foundation (WPF) クラスの既存の依存関係プロパティのコンシューマーの観点から依存関係プロパティを理解し、依存関係プロパティの概要を読み取っていることを前提としています。 また、依存関係プロパティメタデータを読んでおくべきです。

フレームワーク プロパティ メタデータによって伝達される内容

フレームワーク のプロパティ メタデータは、次のカテゴリに分類できます。

  • 要素 (AffectsArrangeAffectsMeasureAffectsRender) に影響するレイアウト プロパティを報告します。 プロパティがそれぞれの側面に影響を与える場合は、これらのフラグをメタデータに設定できます。また、特定のレンダリング動作と情報をレイアウト システムに提供するために、クラスに MeasureOverride / ArrangeOverride メソッドを実装することもできます。 通常、このような実装では、依存関係プロパティでプロパティの無効化がチェックされます。これらのレイアウト プロパティのいずれかがプロパティ メタデータで true であり、それらの無効化のみが新しいレイアウト パスの要求を必要とします。

  • 要素 (AffectsParentArrangeAffectsParentMeasure) の親要素に影響するレイアウト プロパティを報告します。 これらのフラグが既定で設定されている例には、FixedPage.LeftParagraph.KeepWithNextがあります。

  • Inherits. 既定では、依存関係プロパティは値を継承しません。 OverridesInheritanceBehavior では、継承の経路をビジュアル ツリーに移動することもできます。これは、一部のコントロール合成シナリオに必要です。

    手記

    プロパティ値のコンテキストで "inherits" という用語は、依存関係プロパティに固有の何かを意味します。これは、WPF プロパティ システムの WPF フレームワーク レベルの機能により、子要素が親要素から実際の依存関係プロパティ値を継承できることを意味します。 マネージド コード型と、派生型を介したメンバーの継承とは直接関係ありません。 詳細については、プロパティ値の継承を参照してください。

  • データ バインディングの特性 (IsNotDataBindableBindsTwoWayByDefault) を報告します。 既定では、フレームワーク内の依存関係プロパティは、一方向のバインド動作を持つデータ バインディングをサポートします。 データ バインディングのシナリオがまったくない場合は、データ バインディングを無効にすることができます (柔軟性と拡張性を目的としているため、既定の WPF API にはこのようなプロパティの例はあまりありません)。 コンポーネント部分間でコントロールの動作を結び付けるプロパティ (IsSubmenuOpen が例です) または双方向バインディングがユーザーにとって一般的で想定されるシナリオであるプロパティに対して、双方向の既定値を設定できます (Text は例です)。 データ バインディング関連のメタデータの変更は、既定値にのみ影響します。バインディングごとに、既定値は常に変更できます。 バインド モードとバインド全般の詳細については、「データ バインディングの概要」を参照してください。

  • ジャーナリング (Journal) をサポートするアプリケーションまたはサービスによってプロパティをジャーナリングする必要があるかどうかを報告します。 一般的な要素の場合、ジャーナリングは既定では有効になっていませんが、特定のユーザー入力コントロールに対して選択的に有効になります。 このプロパティは、ジャーナル処理の WPF 実装を含むジャーナリング サービスによって読み取られるものであり、通常は、ナビゲーション ステップ間で保持する必要があるリスト内のユーザー選択などのユーザー コントロールに設定されます。 ジャーナルの詳細については、「ナビゲーションの概要」を参照してください。

FrameworkPropertyMetadata の読み取り

上記でリンクされている各プロパティは、FrameworkPropertyMetadata が直接基底クラス UIPropertyMetadataに追加する特定のプロパティです。 これらの各プロパティは、既定で false されます。 これらのプロパティの値を把握することが重要なプロパティのメタデータ要求では、返されたメタデータを FrameworkPropertyMetadataにキャストし、必要に応じて個々のプロパティの値を確認する必要があります。

メタデータの指定

新しい依存関係プロパティの登録にメタデータを適用する目的で新しいメタデータ インスタンスを作成する場合は、使用するメタデータ クラス (基本 PropertyMetadata または FrameworkPropertyMetadataなどの派生クラス) を選択できます。 一般に、FrameworkPropertyMetadataを使用する必要があります。特に、プロパティがプロパティ システムや WPF 関数 (レイアウトやデータ バインディングなど) と対話する場合に使用します。 より高度なシナリオのもう 1 つのオプションは、FrameworkPropertyMetadata から派生して、メンバーに追加の情報を含む独自のメタデータ レポート クラスを作成することです。 または、PropertyMetadata または UIPropertyMetadata を使用して、実装の機能のサポートの程度を伝えることもできます。

既存のプロパティ (AddOwner または OverrideMetadata 呼び出し) の場合は、元の登録で使用されるメタデータ型で常にオーバーライドする必要があります。

FrameworkPropertyMetadata インスタンスを作成する場合、フレームワーク プロパティの特性を伝達する特定のプロパティの値をメタデータに設定するには、次の 2 つの方法があります。

  1. flags パラメーターを許可する FrameworkPropertyMetadata コンストラクターシグネチャを使用します。 このパラメーターには、FrameworkPropertyMetadataOptions 列挙フラグの必要なすべての組み合わせ値を入力する必要があります。

  2. flags パラメーターを使用せずに1つのシグネチャを選択し、変更したい特性に合わせて、FrameworkPropertyMetadata の各レポート用ブール型プロパティを true に設定します。 これを行う場合は、この依存関係プロパティを持つ要素を構築する前に、これらのプロパティを設定する必要があります。ブール型プロパティは、flags パラメーターを回避し、メタデータを設定するこの動作を可能にするために読み取り/書き込みを行いますが、プロパティを使用する前にメタデータが効果的にシールされる必要があります。 したがって、メタデータが要求された後にプロパティを設定しようとすると、無効な操作になります。

フレームワーク プロパティ メタデータのマージ動作

フレームワーク プロパティ メタデータをオーバーライドすると、さまざまなメタデータ特性がマージまたは置換されます。

この動作は Mergeによって実装され、派生メタデータ クラスでオーバーライドできます。

参照