.Register()の代わりにRegisterAttached()を使用する必要がある場合は、どういう違いがありますか?DependencyProperty.Register()または.RegisterAttached()
答えて
私はあなたがDependencyProperty.RegisterとDependencyProperty.RegisterAttachedを意味すると仮定します。
DependencyProperty.Registerは、通常のDependencyPropertyを登録するために使用されます。 WPFのデータバインディング、アニメーションなどに参加することができます。 実際、それらはタイプのないDependencyObjectの上に通常のプロパティとして(getおよびsetアクセサで)公開されます。 SetValue/GetValue。 あなたのタイプの一部としてそれらを宣言します。
一方、添付プロパティは異なります。それらは拡張性システムとして意味されます。エクステンダをWindowsフォームで使用したことがある人は、似たようなものです。 これらを型の一部として宣言し、別の型で使用します。
レイアウト関連の情報として多く使用されています。たとえば、キャンバスには左/上の座標が必要です。グリッドには行と列が必要です。DockPanelにはDock情報などが必要です。レイアウトすることができるすべてのコントロールでこのすべてを宣言しなければならない場合は混乱します。したがって、それらは対応するパネルで宣言されますが、どのコントロールでも使用されます。
必要に応じて、DependencyObjectに任意の情報を添付することができます。 xamlで設定できる情報を宣言するだけで、後でたとえば既存のクラスのスタイルで使用することができます。
したがって、これらの2種類のDependencyPropertyは非常に異なる目的を果たします。通常のプロパティ(Register()を通じて登録された)は、あなたのタイプのインターフェースの一部として通常のプロパティと同様に使用されます。 (RegisterAttached()を介して登録された)添付プロパティは、既存クラスの拡張ポイントとして使用されます。
少し明確にすることを望みます。
DependencyProperty.Register()とDependencyProperty.RegisterAttached()は偶然でしょうか? MSDNにDependencyProperty.Attach()またはDependencyProperty.AttachRegistered()が表示されません。
DependencyProperty.Register()とDependencyProperty.RegisterAttached()の違いは、.RegisterAttached()がDependencyObjectに「通常の」依存関係プロパティを登録するために使用され、.RegisterAttached '依存関係プロパティ。
2種類の依存関係プロパティの違いはかなり簡単です。通常の依存プロパティは、他の.NETプロパティと同様に、特定のDependencyObjectに設定されています。一方、添付プロパティは、特定のDependencyObject(たとえばGrid)に関連付けられていますが、完全に独立したDependencyObject(多くの場合、DependencyObjectの子)に設定されています(たとえば、添付プロパティであるGrid.Row親グリッドの子に)。
添付プロパティの詳細are on MSDN。
RegisterまたはRegisterAttachedに登録されたプロパティは、SetValueおよびGetValueを使用して任意のDependencyObjectにアタッチできます。しかし、ownerType以外の型のオブジェクトにRegisterで登録されたプロパティをアタッチすると、そのメタデータは使用されません(デフォルト値を除く)。これは、InheritsやAffectsMeasureなどの属性がこれらのプロパティに対して機能しないことを意味します。添付プロパティのメタデータに興味がある場合は、RegisterAttachedを使用する必要があります。
詳細については、同様の質問に私の答えを参照してください。Difference between Attached and non-Attached Dependency Properties in Silverlight
- 1. ユーザーコントロールDependencyProperty.RegisterのERROR
- 2. RegisterAttached String AttachPropertyを起動させないPropertyName
- 3. はAまたはBまたはC
- 4. LINQ2SQLまたはEntity Frameworkまたはエンタープライズライブラリ?
- 5. OpenSSLまたはMcrypt? (openssl_encryptまたはmcrypt_encrypt)
- 6. MVCまたはRestまたはBoth
- 7. .NETまたはPHP、コーポレートまたはオープンソース?
- 8. MVC4 ViewBagまたはViewModelまたは?
- 9. RubyまたはPHPまたはPHPフレームワーク?
- 10. infまたはInf?ナノまたはNaN?
- 11. Utf8_general_ciまたはutf8mb4または...?
- 12. ウェブサービスまたはWCFまたは
- 13. サービスまたはスレッドまたはAsyncTask
- 14. Pyrocmsモジュールまたはウィジェットまたはプラグイン
- 15. CVSまたはSVNまたはGIT?
- 16. jqueryまたはjavascriptトリムまたはサブスクリプト
- 17. SpringまたはCDIまたはEJB3
- 18. setTimeoutまたはsetIntervalまたはrequestAnimationFrame
- 19. WebDriverWaitまたはImplicitlyWaitまたはExplicitlyWaitは機能しません
- 20. TemplateBindThickness.Top(またはBottomまたはLeftまたはRight)にバインドする方法?
- 21. スイフトオブジェクトは?または?
- 22. Joomla 1.5エラーを解決する方法 "不正な変数_ファイルまたは_envまたは_getまたは_postまたは_cookieまたは_serverまたは_sessionまたはグローバルがスクリプトに渡されました。"
- 23. 削除または削除のためのGETまたはPOST
- 24. グループメッセージとチャットサービスのためのapacheまたはnginxまたはlighttpd
- 25. は、または無視、またはentityTypeは
- 26. または
- 27. Application.Current.Propertiesまたは
- 28. シングル|または?
- 29. または
- 30. またはA *
だから、あなたが所有していないクラスにプロパティを追加するために使用することができ付けますか?それは違いですか? – Vaccano
ありがとうございました! –
'this.button.SetValue(TextBox.TextProperty、" text ");'(ここで 'this.button'は' System '型です。 Windows.Controls.Button')。これは完璧ですので、答えは完全ではありません。それ以上のものが必要です。 – bitbonk