WPF样式与模板

开发工具与关键技术:WPF样式与模板
作者:李哲定
撰写时间:2021年11月8日

一、WPF样式(Style)
类似于Web应用程序中的CSS,在WPF中可以为控件定义统一的样式(Style)。样式属于资源的一种,例如为Button定义统一的背景颜色和字体:
WPF样式与模板

执行如下:
WPF样式与模板

从执行的结果上来看:
• 在Style中定义的属性及值,影响到Window中的所有类型为Button的控件的样式
• 在Button中可以新定义其他属性(如Foreground),覆盖Style中的定义(Background)
这种样式,类似于CSS中的类型选择器,为某种类型定义样式。
此外还可以在Style中加入x:Key属性,做为特定的样式(注意,这种也需要定义TargetType);定义时还可以基于已定义的某种样式,例如,基于刚才的Button的样式,更改字体的大小及文本的前景及背景颜色:
WPF样式与模板

执行如下:
WPF样式与模板

二、控件模板(ControlTemplate)
当使用一个控件时,如果控件的属性、方法、事件满足程序的需求,但控件的外观不满足要求的时候,除了自定义控件这种方法外,我们还可以通过使用“控件模板”的方式更改控件的外观。例如定义一个圆形的按钮:
WPF样式与模板

执行如下:
WPF样式与模板

三、触发器(Trigger)
值得注意的是,这个时候,对于此按钮,无论是否获得焦点、鼠标是处于其上方,显示的外观均是相同的,如果要定义以上的一些效果,可以使用触发器来实现。
Style、ControlTemplate 和 DataTemplate 都具有 Triggers 属性,该属性可以包含一组触发器。某个属性值更改时,或某个事件引发时,触发器会相应地设置属性或启动操作(如动画操作)。
触发器包含以下几种:
• 属性触发器
• EventTrigger 和 Storyboard
• MultiTrigger、DataTrigger 和 MultiDataTrigger
我们这里可以使用属性触发器来实现:
例如,在ControlTemplate中(即上段代码28行前插入以下代码):
WPF样式与模板

当按键获得键盘焦点时:
WPF样式与模板

鼠标在其上时:
WPF样式与模板

上一篇:WPF 等待对话框


下一篇:C# WPF 调用打印机的两种方法