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

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

このトピックは、次のセクションで構成されています。

  • 必要条件
  • フレームワーク プロパティ メタデータによる通知内容
  • FrameworkPropertyMetadata の読み取り
  • メタデータの指定
  • フレームワーク プロパティ メタデータのマージ動作
  • 関連トピック

必要条件

このトピックでは、ユーザーが Windows Presentation Foundation (WPF) クラスの既存の依存関係プロパティの使用という観点から依存関係プロパティを理解し、「依存関係プロパティの概要」トピックを通読していることを前提としています。 また、「依存関係プロパティのメタデータ」を通読している必要もあります。

フレームワーク プロパティ メタデータによる通知内容

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

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

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

  • Inherits. 既定では、依存関係プロパティは値を継承しません。 OverridesInheritanceBehavior を使用すると、継承のパスがビジュアル ツリー内を通ることもできるようになります。コントロールを複合する一部のシナリオでは、このような必要が生じることがあります。

    メモメモ

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

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

  • 履歴作成をサポートするアプリケーションまたはサービスによって、プロパティの履歴を作成するかどうか (Journal) の報告。 一般的な要素に対しては、履歴作成が既定で有効にされることはありません。特定のユーザー入力コントロールに対して、選択的に有効にします。 これは、WPF の履歴作成の実装を含む、履歴サービスによって読み取られるプロパティです。通常、複数のナビゲーション段階にわたって永続化する必要があるユーザー コントロール (一覧におけるユーザー選択など) に設定します。 履歴の詳細については、「ナビゲーションの概要」を参照してください。

FrameworkPropertyMetadata の読み取り

上記にリンクを示した各プロパティは、FrameworkPropertyMetadata によって直接の基本クラス UIPropertyMetadata に追加される特定のプロパティです。 これらのプロパティの既定値はいずれも false です。 これらのプロパティの値を知るためにメタデータを要求する場合は、返されたメタデータを FrameworkPropertyMetadata にキャストしてから、必要に応じて個々のプロパティの値を確認する必要があります。

メタデータの指定

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

既存のプロパティ (AddOwner 呼び出しまたは OverrideMetadata 呼び出し) は必ず、元の登録で使用されているメタデータ型でオーバーライドします。

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

  1. flags パラメーターを使用可能な FrameworkPropertyMetadata コンストラクター シグネチャを使用します。 このパラメーターには、FrameworkPropertyMetadataOptions 列挙体フラグの結合された値を、必要に応じすべて指定します。

  2. flags パラメーターを持たないシグネチャのいずれかを使用し、各特性の任意の変更について、FrameworkPropertyMetadata 上の報告する各 Boolean プロパティを true に設定します。 この場合、この依存関係プロパティを持つすべての要素の構築前に、これらのプロパティを設定する必要があります。flags パラメーターを使用せずにメタデータを読み込めるよう、これらの Boolean プロパティは読み書き可能な状態ですが、プロパティ使用前にメタデータを事実上シールする必要があります。 そのため、メタデータの要求後にこれらのプロパティを設定しようとすると、無効な操作となります。

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

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

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

参照

参照

GetMetadata

概念

依存関係プロパティのメタデータ

依存関係プロパティの概要

カスタム依存関係プロパティ