UIElement
とFrameworkElement
は、FrameworkElement
がUIElement
を継承していると考えられます。誰も実生活の例を与えることができますか?WPF/SilverlightのUIElementとFrameworkElementの比較
答えて
今のところ例はありませんが、役に立つかもしれないリンクを参照することができます。
UIElementは、視覚的な外観を持ち、Silverlightで基本入力を処理できるほとんどのオブジェクトの基本クラスです。
FrameworkElementは、Silverlightレイアウトに参加するオブジェクトの共通APIのフレームワークを提供します。また、Silverlightのデータバインディング、オブジェクトツリー、およびオブジェクトのライフタイムの機能領域に関連するAPIもFrameworkElementによって定義されています。
どのような追加機能がありますか? http://forums.silverlight.net/p/205863/482651.aspx
This is a good page for learning about WPF Architectureを参照してください。この回答はWPFにのみ適用されます。 UIElement
セクションとFrameworkElement
セクションをチェックし、時間があれば残りのセクションもチェックしてください。ここに2つのレベルが存在する理由を説明したリンク先のページからの引用があります。
この時点では、PresentationCoreアセンブリで実装されているWPFの「コア」機能が注目されています。 WPFを構築する際には、(MeasureとArrangeのレイアウトの契約のような)基本的部分と、Gridのような特定のレイアウトの実装のようなフレームワーク部分との間の明確な分離が望ましい結果でした。その目的は、外部の開発者が必要に応じて独自のフレームワークを作成できるように、スタック内での拡張性の低い点を提供することでした。
要するに、UIElement
は(Visualに由来するので)自分自身を描画する方法を知っています。また、OnPreviewMouseDown
とOnMouseDown
のような仮想メソッドと、Measure
とArrange
を実装してlayout systemの一部を提供することによって、routed events systemを使用することもできます。
FrameworkElement
は、UIElement
で定義されている仮想メソッドの一部を実装することでレイアウトシステムを拡張します。レイアウトプロパティを設定する一貫した方法を提供します。 Margin
プロパティとMinWidth
プロパティです。さらに、スタイリングが可能で、data bindingに参加できます。
質問に答えて、追加の能力が必要な場合はFrameworkElement
に追加してください。スタイル、バインディング、または使いやすいレイアウトシステムが必要です。次に、それらから派生します。それ以外の場合は、FrameworkElement
を使用すると若干のオーバーヘッドが発生するため、UIElement
から派生します。これらはPadding
のような便利な新Templatingような機能の層と特性を提供するよう
また、あなたは、(FrameworkElement
由来)Control
クラスを見ている必要があります。
inheritance hierarchyに精通していることをお勧めします。他のクラスから派生させたいかもしれません(Visual
よりチェーンを上回らないかもしれません)。
私はUIElementから継承するとは考えていませんが、非常に広いシナリオです。 UIElementには欠けているDataContextプロパティが遅かれ早かれ必要になるため、ほとんどの場合、ユーザーはFrameworkElementから派生したいと考えています。 – Fazi