WPF两大控件重写模板

DataTemplate数据模版、ControlTemplate控件模版
1、为什么要重写控件:在开发过程中,我们有时候用WPF原生的控件就能实现自己的需求,但样式、风格并不能满足我们的需求,那么就需要自定义样式与模版来帮助我们重写控件了。

2、了解如何自定义控件样式:在Style标签中使用TargetType属性定义当前要设置的样式类型【Button】,接着通过Setter设置器去自定义一种新的按钮样式,Setter中的Property属性用于指定样式的具体属性,Value属性则用于设置样式具体的值。如果想创建的是动态样式,可以为其添加Trigger触发器【四种类型】,在Style.Triggers标签中添加。

3、ControlTemplate控件模版
①指定控件的可视结构和可视行为,创建ControlTemplate后,可以在不更改控件功能的情况下改变其外观。比如说:可以将应用程序中的按钮设置为圆形而不是默认的方形,但该Button按钮必须仍然保有创建事件的功能。

②定义控件模版的方法有三种:内联定义(ControlTemplate标签中定义,TargetType属性指定重写的控件的具体类型,但ControlTemplate必须写在控件的附加属性Template中)、资源定义(为控件定义资源类<控件名称.Resources>,在控件资源中添加ControlTemplate后即可在该标签内重写)、Style定义(在资源类Resources中添加Style样式,在Style中创建Setter设置器,在Setter的附加属性Setter.Value中定义ControlTemplate模版去重写控件)。

③ControlTemplate控件模板中又包括ControlTemplate模版和ItemsPanelTemplate模版。

④WPF中的每个控件都有一个默认的模板,该模板描述了控件的外观(视觉树)以及外观对外界刺激所做出的反应(触发器)。我们可以通过控件模版去自定义一个新的模板来替换掉控件自带的默认模板,以便打造出极具个性化的控件。

⑤ControlTemplate包含三个重要的属性:
(1)VisualTree:模板的视觉树,使用这个属性来描述控件的外观;
(2)Triggers:触发器列表,里面包含一些触发器Trigger,通过定制这个触发器列表来使控件对外界的刺激作出反应,比如鼠标经过时文本变成粗体等;
(3)Animation:在控件模版中定义动画资源,要先定义好故事板【Storyboard】,再去定义触发器,因为故事板中的动画是需要靠触发器去进行调用的,因此我们要先定义动画然后定义触发器事件,Storyboard要定义在模版的附加属性【<ControlTemplate.Resources>】中,接着再在Storyboard中定义Animation动画。

4、控件模版的重写与修改控件Style样式两种之间的区别:Style只能改变控件的已有属性值(如颜色字体)来定制控件,控件模板则是改变控件内部结构(VisualTree,视觉树)来完成更为复杂的定制,比如我们可以定制这样的按钮:在它的左半部分显示一个小图标而它的右半部分显示文本。要替换掉控件的模板,只要声明一个ControlTemplate对象,并对该ControlTemplate对象做出相应的配置,接着将对象赋值给控件的Template属性就可以了。

5、DataTemplate数据模版
①用于为数据定制显示方式,虽然数据的值是固定的,但通过数据模版可以做到让它的表现方式变得多种多样;比如一个时间数据,在以前一般使用一个字符串“12:03”来显示,但通过数据模版,我们可以制作出一个显示小时钟,利用WPF中的数据模板技术可随意并轻松地表现数据,它适用于Content Control类控件与Items Control类控件。
②两种模版通常需要结合使用,ControlTemplate负责重新定义控件的视觉树【样式】,而DataTemplate则负责定义控件中数据的展现形式【重新设置控件内的布局以及定义好不同的数据承载控件】,Binding绑定可以帮助页面接收后台传输的数据。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页