42

.Register() の代わりに RegisterAttached() を使用する必要がある場合、2 つの違いは何ですか?

4

3 に答える 3

54

DependencyProperty.Register と DependencyProperty.RegisterAttached を意味していると思います。

DependencyProperty.Register は、通常の DependencyProperty を登録するために使用されます。これらは通常のプロパティとして表示され、WPF の DataBinding やアニメーションなどに参加できるというひねりが加えられています。 /値を取得します。それらを型の一部として宣言します。

一方、添付プロパティは異なります。それらは拡張性システムとして意図されています。Windows フォームでエクステンダーを使用したことがあれば、それらは似たようなものです。それらを型の一部として宣言し、別の型で使用します。

それらは、レイアウト関連の情報に多く使用されます。たとえば、Canvas には Left/Top 座標が必要で、Grid には Row と Column が必要であり、DockPanel には Dock 情報が必要です。レイアウト可能なすべての Control でこれらすべてを宣言する必要があるとしたら、面倒です。したがって、それらは対応するパネルで宣言されますが、任意のコントロールで使用されます。

必要に応じて、同じことを使用して DependencyObject に任意の情報を添付できます。たとえば、既存のクラスのスタイルで後で使用するために、xaml で設定できる情報を宣言するだけで便利です。

したがって、これら 2 種類の DependencyProperty は、非常に異なる目的を果たします。通常のプロパティ ( Register() で登録) は、通常のプロパティと同じように、型のインターフェイスの一部として使用されます。添付プロパティ ( RegisterAttached() で登録) は、既存のクラスの拡張ポイントとして使用されます。

それが少し明確になることを願っています。

于 2009-05-27T05:04:51.313 に答える
12

DependencyProperty.Register() と DependencyProperty.RegisterAttached() の違いは、.Register() は DependencyObject に「通常の」依存関係プロパティを登録するために使用され、.RegisterAttached() は「添付された」依存関係プロパティを設定するために使用されることです。

依存関係プロパティの 2 つのタイプの違いはかなり単純です。通常の依存関係プロパティは、他の .NET プロパティと同じように、特定の DependencyObject に設定されます。一方、添付プロパティは特定の DependencyObject (例: Grid) に関連付けられていますが、完全に別の DependencyObject で設定されます。多くの場合、添付プロパティを定義する DependencyObject の子です (例: 添付プロパティである Grid.Row が設定されます)。親グリッドの子で)。

添付プロパティの詳細については、MSDNを参照してください。

于 2009-05-27T00:19:12.400 に答える
5

Register または RegisterAttached で登録されたプロパティは、SetValue および GetValue を使用して任意の DependencyObject にアタッチできます。ただし、Register に登録されたプロパティを ownerType 以外の型のオブジェクトにアタッチすると、そのメタデータは使用されません (既定値を除く)。これは、Inherits や AffectsMeasure などの属性がこれらのプロパティに対して機能しないことを意味します。添付プロパティのメタデータに関心がある場合は、RegisterAttached を使用する必要があります。

詳細については、同様の質問に対する私の回答を参照してください: Silverlight のアタッチされた依存関係プロパティとアタッチされていない依存関係プロパティの違い

于 2011-09-19T07:18:29.347 に答える