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

摘要:
控件和自定义控件的概念Windows Presentation Foundation(WPF)附带了几乎所有Windows应用程序中使用的许多常见UI组件,允许控件用户在不创建新子类的情况下从根本上改变控件的外观。自定义控件的设计原则是丰富内容模型、样式、模板和触发器。在WPF中创建控件的最简单方法是从UserControl派生。

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

本文摘要:

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

2:更改控件的外观;

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

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

    Windows Presentation Foundation (WPF) 附带了许多几乎在所有 Windows 应用程序中都会使用的常见 UI 组件,如 ButtonLabelTextBoxMenuListBox。以前,这些对象被称为控件。现在,WPF SDK 继续使用术语“控件”泛指任何代表应用程序中可见对象的类。请注意,类不必从 Control 类继承即可具有可见外观。从 Control 类继承的类包含一个 ControlTemplate,允许控件的使用方在无需创建新子类的情况下根本改变控件的外观。

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

2:更改控件的外观

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

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

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

从 UserControl 派生

     在 WPF 中创建控件的最简单方法是从 UserControl 派生。如果生成继承自 UserControl 的控件,需要将现有组件添加到 UserControl,命名这些组件,然后在 可扩展应用程序标记语言 (XAML) 中引用事件处理程序。执行这些操作之后,即可在代码中引用这些命名元素和定义事件处理程序。此开发模型与用于 WPF 应用程序开发的模型非常相似。

如果生成正确,UserControl 可以利用丰富内容、样式和触发器的优点。但是,如果控件继承自 UserControl,则使用该控件的用户将无法使用 DataTemplateControlTemplate 来自定义其外观。因此,有必要从 Control 类或其派生类(UserControl 除外)进行派生,以便创建支持模板的自定义控件。

从 UserControl 派生的优点

     如果符合以下所有情况,请考虑从 UserControl 派生:

  • 希望以类似于生成应用程序的方式生成控件。

  • 控件仅由现有组件组成。

  • 不需要支持复杂自定义项。

从 Control 派生

     从 Control 类派生是大多数现有 WPF 控件使用的模型。在创建继承自 Control 类的控件时,可使用模板定义其外观。通过这种方式,可以将运算逻辑从可视化表示形式中分离出来。这样还可以确保使用命令和绑定而非事件来分离 UI 和逻辑,并在可能时避免引用 ControlTemplate 中的元素。  如果将控件的 UI 和逻辑正确分离,则控件的用户可以重定义该控件的 ControlTemplate 以自定义其外观。 尽管构建自定义 Control 不像构建 UserControl 那样容易,但是自定义 Control 可提供最大的灵活性。

从 Control 派生的优点

     如果符合以下任一情况,请考虑从 Control 派生,而不要使用 UserControl 类:

  • 希望控件外观能通过 ControlTemplate 进行自定义。

  • 希望控件支持不同的主题。

从 FrameworkElement 派生

     从 UserControlControl 派生的控件依赖于组合现有元素。很多情况下,这是一种可接受的解决方案,因为从 FrameworkElement 继承的任何对象都可以位于 ControlTemplate 中。但是,某些时候,简单的元素组合不能满足控件的外观需要。对于这些情况,使组件基于 FrameworkElement 才是正确的选择。

生成基于 FrameworkElement 的组件有两种标准方法:直接呈现和自定义元素组合。直接呈现涉及的操作包括:重写 FrameworkElementOnRender 方法,并提供显式定义组件视觉效果的 DrawingContext 操作。此方法由 ImageBorder 使用。自定义元素组合涉及的操作包括使用 Visual 类型的对象组合组件的外观。有关示例,请参见使用 DrawingVisual 对象Track 是 WPF 中使用自定义元素组合的控件示例。在同一控件中,也可以混合使用直接呈现和自定义元素组合。

从 FrameworkElement 派生的优点

     如果符合以下任一情况,请考虑从 FrameworkElement 派生:

  • 希望对控件的外观进行精确控制,而不仅仅是简单的元素组合提供的效果。

  • 想要通过定义自己的呈现逻辑来定义控件的外观。

  • 想要以一种 UserControlControl 之外的新颖方式组合现有元素。

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:控件和自定义控件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[虚拟机] VMware 15 + CentOS 7.7/8.0在主机和客户机之间拷贝文件失败的解决办法layui select 下拉框 级联 动态赋值 与获取选中值下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

asp11

AppRelativeTemplateSourceDirectory 获取或设置包含该控件的 Page 或 UserControl 对象的应用程序相对虚拟目录。 1.0 BindingContainer 获取包含该控件的数据绑定的控件。 1.0 ClientID 获取由 ASP.NET 生成的服务器控件标识符。 1.0 Controls 获...

iOS开发常用之 HUD 弹窗

HUD与吐司 MBProgressHUD - 最多人用的loading。 EBuyCommon - 1.基于MBProgressHUD实现得图形加载提示方式,及其标题方式提醒.2。弹窗。 SVProgressHUD - SVProgressHUD的加载,如果你需要定制化的等待提示器,这个就是了(也许是最好的)。 ProgressHUD - P...

分享一个Winform里面的HTML编辑控件Zeta HTML Edit Control,汉化附源码

我们知道,Web开发上有很多HTML的编辑控件,如FCKEditor、CKEditor、kindeditor等等,很多都做的很好,而虽然Winform里面有WebBrowser控件,但是默认这个控件是不允许编辑内容的,可以显示网页而已。Winform开发里面,有些使用RichTextBox控件来编辑HTML,也有一些结合WebBrowser控件来实现内容的...

WinForm窗体自适应分辨率

我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观。实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置和大小,当窗体改变比例时,其控件的位置和大小也按此比例变化即可。因为窗体上控件的位置和大小是相对于自己所在的窗体的,也就是所谓的窗口坐标。     在这里我们只考虑相对于自己窗体的窗口坐标更简单,也就是成比例变化。为了多个窗...

Halcon 学习笔记--形态学(5)

一、二值化与灰度图像 1、 二值化图像只有两个元素之分0和1—非黑即白  算子: binary_threshold(Image : Region : Method, LightDark : UsedThreshold)参数:Image:需要进行阈值的图像Region:处理后的区域Method:分割方法('max_separability':最大限度的可分性...

STL之六:map/multimap用法详解

转载于:http://blog.csdn.net/longshengguoji/article/details/8547007 map/multimap     使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理。它们可根据key的排序准则自动将元素排序。mul...