WPF是一个专门用来作用于图形界面显示的开发工具。我们可以使用它轻松创建出精美的图形界面。WPF 提供了三种用于创建控件的WPF控件模型,每一种都提供了一组不同的功能和灵活性级别。开始编写新控件之前,应先了解这些模型,这一点至关重要。#t#
WPF控件模型1。从 UserControl 派生
在 WPF 中创建控件的最简单的方法是创建 UserControl 的子类。UserControl 的开发模型非常类似于 WPF 中用于应用程序开发的模型:创建可视元素,使用可扩展应用程序标记语言 (XAML) 为这些可视元素指定名称并引用事件处理程序。然后,可以通过代码引用已命名的元素。
如果生成正确,UserControl 可以利用丰富内容、样式和触发器的优点。但是,若要支持模板,需要从 Control 派生以创建自定义 Control。
从 UserControl 派生的优点
在以下情况下可考虑从 UserControl 派生:
想要以类似于生成应用程序的方式生成控件。
控件仅由现有组件组成。
不需要支持复杂自定义项。
WPF控件模型2。从 Control 派生
从 Control 类派生是大多数现有 WPF 控件使用的模型。自定义 Control 旨在使用模板将运算逻辑与可视表示形式分开。尽管生成自定义 Control 不像生成 UserControl 那样简单,但自定义 Control 可提供最大的灵活性。
从 Control 派生的优点
如果您符合以下一种或多种情况,请考虑从 Control 派生,而不使用 UserControl 类:
希望通过 ControlTemplate 自定义控件的外观。
希望控件支持不同主题。
WPF控件模型3。从 FrameworkElement 派生
从 UserControl 和 Control 派生的控件依赖于组合现有元素。有时自定义组件需要的精确控制超过简单的元素组合可提供的功能。对于这些情况,使组件基于 FrameworkElement 才是正确的选择。生成基于 FrameworkElement 的组件有两种标准方法:直接呈现和自定义元素组合。
直接呈现涉及的操作包括:重写 FrameworkElement 的 OnRender 方法,并提供显式定义组件视觉效果的 DrawingContext 操作。此方法由 Image 和 Border 使用。自定义元素组合涉及的操作包括实例化和使用 Visual 类型的对象组合组件的外观。有关示例,请参见使用 DrawingVisual 对象。Track 是 WPF 中使用自定义元素组合的控件示例。也可以在同一控件中混合使用直接呈现和自定义元素组合。
从 FrameworkElement 派生的优点
如果以下一种或多种情况适用,请考虑从 FrameworkElement 派生:
想要对控件的外观进行精确控制,而不仅仅是简单的元素组合提供的内容。
想要通过定义自己的呈现逻辑来定义控件的外观。
想要以一种 UserControl 和 Control 之外的新颖方式组合现有元素。
以上就是有关WPF控件模型的相关概念解析。