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 谷歌 更多
本文基于
Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名
http://www.cnblogs.com/luminji(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。