我何时从UIElement
和FrameworkElement
派生,考虑FrameworkElement
继承UIElement
。任何人都可以给出现实生活中的例子吗?
答案 0 :(得分:21)
This is a good page for learning about WPF Architecture,此答案仅适用于WPF。如果您有时间,请查看UIElement
和FrameworkElement
部分,以及其他部分。以下是链接页面的引用,解释了为什么存在2个级别:
到目前为止,WPF的“核心”功能 - 在PresentationCore程序集中实现的功能一直是焦点。在构建WPF时,基础部分(如使用Measure和Arrange的布局合同)和框架部分(如Grid的特定布局的实现)之间的清晰分离是期望的结果。目标是在堆栈中提供一个低扩展点,允许外部开发人员在需要时创建自己的框架。
简而言之,UIElement
知道如何绘制自己(因为它们是从Visual派生的)。他们还可以使用routed events system来提供OnPreviewMouseDown
和OnMouseDown
等虚拟方法,并通过实施Measure
和Arrange
来提供layout system的部分内容。
FrameworkElement
通过实现UIElement
中定义的一些虚拟方法来扩展布局系统。它们提供了一种设置布局属性的一致方法,例如, Margin
属性和MinWidth
属性。此外,可以设置样式,他们可以参加data binding。
在回答您的问题时,如果您需要FrameworkElement
添加的任何额外功能,例如你需要更容易使用的样式,装订或布局系统,然后从它们派生。否则,从UIElement
派生,因为使用FrameworkElement
会产生轻微的开销。
另外,您应该查看Control
类(源自FrameworkElement
),因为这些类提供了有用的新功能层,例如Templating和Padding
等属性
熟悉inheritance hierarchy也是一个好主意,您可能希望从其中的其他类派生(尽管可能没有比Visual
更高的链。)
答案 1 :(得分:-1)
我现在没有任何例子,但我可以推荐给可能有帮助的链接。
UIElement是大多数具有视觉外观的对象的基类,可以在Silverlight中处理基本输入。
FrameworkElement为参与Silverlight布局的对象提供了通用API的框架。 FrameworkElement还定义了与Silverlight中的数据绑定,对象树和对象生存期功能区域相关的API。
那么你有什么额外的功能?见http://forums.silverlight.net/p/205863/482651.aspx