我什么时候从继承UIElement
和FrameworkElement
考虑FrameworkElement
继承UIElement
。任何人都可以举出现实生活中的例子吗?
2 回答
这是一个学习 WPF Architecture 的好页面,这个答案只适用于 WPF。如果您有时间,请查看UIElement
和FrameworkElement
部分以及其他部分。这是来自链接页面的引述,解释了为什么存在 2 个级别:
在本主题中,WPF 的“核心”特性——PresentationCore 程序集中实现的特性一直是重点。在构建 WPF 时,基础部分(如带有 Measure 和 Arrange 的布局合同)和框架部分(如 Grid 等特定布局的实现)之间的清晰分离是期望的结果。目标是在堆栈中提供一个低扩展点,允许外部开发人员在需要时创建自己的框架。
简而言之,UIElement
s 知道如何绘制自己(因为它们是从 Visual 派生的)。他们还可以通过提供像and之类的虚拟方法来使用路由事件系统,并通过实现and来使用部分布局系统。OnPreviewMouseDown
OnMouseDown
Measure
Arrange
FrameworkElement
s 通过实现定义的一些虚拟方法来扩展布局系统UIElement
。它们提供了设置布局属性的一致方式,例如Margin
属性和MinWidth
属性。此外,可以设置样式,并且可以参与数据绑定。
在回答您的问题时,如果您需要FrameworkElement
添加的任何额外功能,例如您需要更易于使用的样式、绑定或布局系统,请从它们中派生。否则,派生自UIElement
,因为使用FrameworkElement
.
此外,您应该查看Control
类(派生自FrameworkElement
),因为它们提供了有用的新功能层,如模板和属性,如Padding
.
熟悉继承层次结构也是一个好主意,您可能希望从其中的其他类派生(尽管可能不比链更高Visual
)。
我现在没有任何示例,但我可以向您推荐可能有帮助的链接。
UIElement是大多数具有视觉外观并且可以在 Silverlight 中处理基本输入的对象的基类。
FrameworkElement为参与 Silverlight 布局的对象提供了一个通用 API 框架。FrameworkElement 还定义了与 Silverlight 中的数据绑定、对象树和对象生命周期功能区域相关的 API。
那么,您可以获得哪些额外功能?见http://forums.silverlight.net/p/205863/482651.aspx