WPF控件模型相关概念解析

开发 开发工具
WPF控件模型的创建可以从三个模式实现,主要包括:从 UserControl 派生;从 Control 派生以及从 FrameworkElement 派生等等。

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控件模型的相关概念解析。

责任编辑:曹凯 来源: 博客园
相关推荐

2009-12-25 11:23:43

WPF命令模型

2009-12-23 15:27:34

WPF图形系统

2009-12-28 16:20:50

WPF内嵌样式

2009-12-29 09:54:27

WPF文字布局

2009-12-23 17:18:45

WPF Attache

2009-12-23 18:16:35

WPF布局控件

2009-12-24 15:43:17

WPF控件相对位置

2009-12-28 17:54:49

WPF嵌入式资源

2009-12-15 15:55:43

Ruby模块

2009-12-25 16:58:23

WPF名称范围

2010-01-06 18:21:24

2012-02-08 10:16:43

WPF

2009-12-31 16:44:53

Silverlight

2010-02-02 16:15:38

C++变量声明

2010-01-28 16:45:44

Android单线程模

2010-01-19 15:08:18

VB.NET对象成员

2009-12-23 17:01:09

WPF Command

2010-02-01 11:01:30

C++静态构造函数

2010-01-13 16:26:57

VB.NET通知控件

2012-02-02 16:32:23

Silverlight控件模型分类
点赞
收藏

51CTO技术栈公众号