天天看点

WPF快速指导7:控件和自定义控件

WPF快速指导7:控件和自定义控件

本文摘要:

1:控件和自定义控件的概念;

2:更改控件的外观;

3:自定义控件的设计原则;

1:控件和自定义控件的概念

    Windows Presentation Foundation (WPF) 附带了许多几乎在所有 Windows 应用程序中都会使用的常见 UI 组件,如

Button Label TextBox Menu ListBox 。以前,这些对象被称为控件。现在,WPF SDK 继续使用术语“控件”泛指任何代表应用程序中可见对象的类。请注意,类不必从 Control 类继承即可具有可见外观。从 类继承的类包含一个 ControlTemplate

,允许控件的使用方在无需创建新子类的情况下根本改变控件的外观。

    那么,什么是自定义控件。从第一段的描述中其实已经看到,自定义控件包含两类。一类是集成Control来实现,一类是仅仅通过定义

即可。

2:更改控件的外观

    通过执行以下操作之一来更改控件的外观:

  • 更改控件的属性值。
  • 为控件创建 Style
  • 为控件创建新

3:自定义控件的设计原则

     通过丰富内容模型、样式、模板和触发器,最大程度地减少了创建新控件的需要。但是,如果确实需要创建新控件,那么理解 WPF 中的不同控件创作模型就显得非常重要。WPF 提供三个用于创建控件的一般模型,每个模型都提供不同的功能集和灵活度。这三个模型的基类分别为

UserControl FrameworkElement
从 UserControl 派生

     在 WPF 中创建控件的最简单方法是从

派生。如果生成继承自

的控件,需要将现有组件添加到

,命名这些组件,然后在 可扩展应用程序标记语言 (XAML) 中引用事件处理程序。执行这些操作之后,即可在代码中引用这些命名元素和定义事件处理程序。此开发模型与用于 WPF 应用程序开发的模型非常相似。

如果生成正确,

可以利用丰富内容、样式和触发器的优点。但是,如果控件继承自

,则使用该控件的用户将无法使用

DataTemplate

来自定义其外观。因此,有必要从

类或其派生类(

除外)进行派生,以便创建支持模板的自定义控件。

从 UserControl 派生的优点

     如果符合以下所有情况,请考虑从

派生:

  • 希望以类似于生成应用程序的方式生成控件。
  • 控件仅由现有组件组成。
  • 不需要支持复杂自定义项。
从 Control 派生

     从

类派生是大多数现有 WPF 控件使用的模型。在创建继承自

类的控件时,可使用模板定义其外观。通过这种方式,可以将运算逻辑从可视化表示形式中分离出来。这样还可以确保使用命令和绑定而非事件来分离 UI 和逻辑,并在可能时避免引用

中的元素。  如果将控件的 UI 和逻辑正确分离,则控件的用户可以重定义该控件的

以自定义其外观。 尽管构建自定义

不像构建

那样容易,但是自定义

可提供最大的灵活性。

从 Control 派生的优点

     如果符合以下任一情况,请考虑从

派生,而不要使用

类:

  • 希望控件外观能通过 进行自定义。
  • 希望控件支持不同的主题。
从 FrameworkElement 派生

派生的控件依赖于组合现有元素。很多情况下,这是一种可接受的解决方案,因为从

继承的任何对象都可以位于

中。但是,某些时候,简单的元素组合不能满足控件的外观需要。对于这些情况,使组件基于

才是正确的选择。

生成基于

的组件有两种标准方法:直接呈现和自定义元素组合。直接呈现涉及的操作包括:重写

OnRender

方法,并提供显式定义组件视觉效果的

DrawingContext

操作。此方法由

Image Border

使用。自定义元素组合涉及的操作包括使用

Visual

类型的对象组合组件的外观。有关示例,请参见

使用 DrawingVisual 对象 Track

是 WPF 中使用自定义元素组合的控件示例。在同一控件中,也可以混合使用直接呈现和自定义元素组合。

从 FrameworkElement 派生的优点

  • 希望对控件的外观进行精确控制,而不仅仅是简单的元素组合提供的效果。
  • 想要通过定义自己的呈现逻辑来定义控件的外观。
  • 想要以一种 之外的新颖方式组合现有元素。
TMJ .NET培训,开创 200元/月,学到会!
NET C# 入门级 .NET C# 专业级 .NET 架构级 BS系统专业级 BS系统安全

1.开篇及C#程序、解决方案的结构

2.源码管理之TFS入门

3.打老鼠初级

……

21.CMS之主要功能实现

22.进程和线程基础

23.类型转换

24.算法基础

25.初级课程之剩余知识点

1.消灭打老鼠游戏中的自定义委托

2.垃圾回收

3.Dispose模式

16.异常使用指导

17.最常用的重构指导

18.Debug和IDE的进阶

19.Resharper的使用

20.ILSPY的使用

1.Socket入门

2.打造打老鼠游戏网络版

3.WCF入门

10.依赖注入

11.万物兼可测试

12.软件指标之覆盖率计算

13.软件指标之代码行

14.软件指标之圈复杂度、嵌套深度

1.HTML

2.WebForm原理

3.CSS必知必会

19.让浏览器缓存Shop

20.Asp.net的生命周期

21.Asp.net网站的发布以及调试晋级

22.BS程序的本质

23.压力测试我们的Shop

1.Fiddler必知必会

2.IE开发者工具必知必会

3.跨站脚本防范

4.权限欺骗防范

5.参数越界防范

6.会话劫持防范

7.CSRF防范

8.盗链防范

9.静态文件的保护

将本文分享到:

QQ空间 新浪微博 人人网 开心网 搜狐微博 MSN 谷歌 更多
WPF快速指导7:控件和自定义控件

本文基于

Creative Commons Attribution 2.5 China Mainland License

发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名

http://www.cnblogs.com/luminji

(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。