4

WPF で一部のコンテンツをレンダリングするクラスを作成しています。コンテンツのレンダリング方法をユーザーが制御できるようにしたいと考えています。レンダリングは主に線をなでることなので、System.Windows.Forms.Shapes.Line クラスを調べて、どのプロパティを実装する必要があるかを把握することにしました。これにより、ほとんどのStrokeXXXXプロパティを実装することになりましたが、それぞれがレンダリングに影響を与えるメタデータを必要とするため、多くの単調な作業です。

同僚は、次のように Shape からプロパティを「借用」することを提案しました。

Shape.StrokeThicknessProperty.AddOwner(typeof(MyType));

これはかなり良いアイデアのようです。これを行うと、強制とプロパティ変更コールバックを設定する機能が失われると思いましたが、PropertyMetadata を取るオーバーロードがこれを許可しているようです。私が見ることができる唯一の欠点は、Shape の実装が変更された場合にクラスに影響を与えることですが、.NET インターフェイスが大幅に変更される頻度は不明です。

どう思いますか?これは、よく知られているクラスが必要な動作と安定したインターフェイスを備えている場合にプロパティを定義する適切な近道ですか、それともガソリン風呂にいる間に確実に火を扱う方法ですか?

4

2 に答える 2

4

DPを借りることは非常に安全で便利です...この件については、WPF博士による次の投稿を読んでください。

彼が提供する「ヒント」のいくつかを次に示します。

  • あなたは常に所有者クラスがあなたが借りるどんな財産でも何をするかを知っているべきです。
  • デフォルト値と継承に注意を払う必要があります。デフォルト値がtrueのboolプロパティが必要な場合もあります...デフォルト値がfalseの場合もあります。継承するプロパティが必要な場合もあります...明示的に継承を望まない場合もあります。(TextElement.FontSizeのようなプロパティを借用すると、ツリーの下位にあるものが実際に台無しになる可能性があります。)
  • 所有者クラスは、プロパティを必要に応じて使用する機能を妨げるPropertyChangedCallbackを定義する場合があります。所有者クラスがプロパティで何をするかを常に知ってください。
  • 所有者クラスは、指定する値を入力できないようにするプロパティの検証ルーチンを提供する場合があります。繰り返しになりますが、所有者クラスがプロパティで何をするかを常に知っておいてください。プロパティは、オブジェクトのプロパティが変更されるたびに親の配置を無効にするFixedPage.Bottomなど、パフォーマンスの面でコストがかかる方法で登録される場合があります。この動作が明示的に必要な場合もあります...それ以外の場合は、レイアウトパスが不必要に発生します。繰り返しになりますが、所有者クラスがプロパティで何をするかを常に知っておいてください。
  • フレームワーク自体がプロパティを使用しようとしているシナリオ(ItemsControlのTextSearch.TextPathなど)でプロパティを使用すると、フレームワークと競合していることに気付く可能性があります。
于 2008-10-23T06:15:08.547 に答える
1

個人的には、独自の依存関係プロパティを作成し続けるだけです。追加の作業はそれほど多くないので、考えられる警告について心配する必要はありません。

于 2008-10-24T19:49:06.270 に答える