WPF / Silverlight中的UIElement与FrameworkElement

时间:2011-05-10 21:45:12

标签: wpf silverlight uielement frameworkelement

我何时从UIElementFrameworkElement派生,考虑FrameworkElement继承UIElement。任何人都可以给出现实生活中的例子吗?

2 个答案:

答案 0 :(得分:21)

This is a good page for learning about WPF Architecture,此答案仅适用于WPF。如果您有时间,请查看UIElementFrameworkElement部分,以及其他部分。以下是链接页面的引用,解释了为什么存在2个级别:

  

到目前为止,WPF的“核心”功能 - 在PresentationCore程序集中实现的功能一直是焦点。在构建WPF时,基础部分(如使用Measure和Arrange的布局合同)和框架部分(如Grid的特定布局的实现)之间的清晰分离是期望的结果。目标是在堆栈中提供一个低扩展点,允许外部开发人员在需要时创建自己的框架。

简而言之,UIElement知道如何绘制自己(因为它们是从Visual派生的)。他们还可以使用routed events system来提供OnPreviewMouseDownOnMouseDown等虚拟方法,并通过实施MeasureArrange来提供layout system的部分内容。

FrameworkElement通过实现UIElement中定义的一些虚拟方法来扩展布局系统。它们提供了一种设置布局属性的一致方法,例如, Margin属性和MinWidth属性。此外,可以设置样式,他们可以参加data binding

在回答您的问题时,如果您需要FrameworkElement添加的任何额外功能,例如你需要更容易使用的样式,装订或布局系统,然后从它们派生。否则,从UIElement派生,因为使用FrameworkElement会产生轻微的开销。

另外,您应该查看Control类(源自FrameworkElement),因为这些类提供了有用的新功能层,例如TemplatingPadding等属性

熟悉inheritance hierarchy也是一个好主意,您可能希望从其中的其他类派生(尽管可能没有比Visual更高的链。)

答案 1 :(得分:-1)

我现在没有任何例子,但我可以推荐给可能有帮助的链接。

UIElement是大多数具有视觉外观的对象的基类,可以在Silverlight中处理基本输入。

FrameworkElement为参与Silverlight布局的对象提供了通用API的框架。 FrameworkElement还定义了与Silverlight中的数据绑定,对象树和对象生存期功能区域相关的API。

那么你有什么额外的功能?见http://forums.silverlight.net/p/205863/482651.aspx