13

プロパティをバックアップする場合は PropertyMetadata を使用し、アニメーションをサポートする場合は UIPropertyMetadata を使用し、ユーザー コントロールで使用する Framework プロパティには FrameworkMetadata を使用するというこれらのクラスの基本的な違いを知っています。

しかし、私は理論的な部分しか理解していません。これら 3 つのクラスすべてを 3 つの異なる依存関係プロパティで使用し、それらを明確に区別する最も単純な例を説明していただければ、非常に助かります。

前もって感謝します。

4

3 に答える 3

19

出典: PropertyMetadata と FrameworkPropertyMetadata の比較

カスタム依存関係プロパティを実装し、を呼び出してプロパティを登録DependencyProperty.Registerする場合は、 のインスタンスを渡すことでプロパティのメタデータを指定しますPropertyMetadata。これは、PropertyMetadataクラスのインスタンスまたはそのサブクラスの 1 つのインスタンスです。相違点を以下に示します。

PropertyMetadata– 依存関係プロパティに関連する基本的なメタデータ

  • CoerceValueCallback– 設定時に値を強制する
  • DefaultValue– プロパティのデフォルト値
  • PropertyChangedCallback– プロパティの新しい実効値に対応する

UIPropertyMetadata– 以下から派生しPropertyMetadata、追加します。

  • IsAnimationProhibited– このプロパティのアニメーションを無効にしますか?

FrameworkPropertyMetadata– 以下から派生しUIPropertyMetadata、追加します。

  • AffectsArrange, AffectsMeasure, AffectsParentArrange, AffectsParentMeasure, AffectsRender– プロパティ値の変更後にレイアウト計算を再実行する必要がありますか?
  • BindsTwoWayByDefault, DefaultUpdateSourceTrigger, IsDataBindingAllowed, IsNotDataBindable– プロパティがデータ バインディングにどのように参加するかを指示します
  • InheritsOverridesInheritanceBehavior– このプロパティに対して継承は機能しますか?
  • Journal– ジャーナリング時にこの値を保存しますか?
  • SubPropertiesDoNotAffectRender– レイアウト変更時にこのオブジェクトのプロパティを確認しますか?
于 2015-05-18T18:13:54.097 に答える
5

PropertyMetadata と FrameworkPropertyMetadata の実際上の重要な違いは、後者ではFrameworkPropertyMetadataOptionsのセットを指定できることです。

たとえば、指定するFrameworkPropertyMetadataOptions.AffectsRenderと、プロパティが変更された UIElement の再レンダリングの開始が気になります。このフラグがないと、PropertyChangedCallback で手動で行う必要があります。

于 2013-01-08T19:33:40.793 に答える