WPF样式和触发器
理解样式
样式可以定义通用的格式化特征集合。
Style 类的属性
Setters、Triggers、Resources、BasedOn、TargetType
<Style x:Key="BitFontButtonStyle" TargetType="Button">
<setter Property="FontFamily" Value="Times New Roman"/>
</Style>
如果以上代码不使用x:Key ,那个TargetType属性还可以作为自动应用样式的快捷方式。
<!--删除自动应用的样式-->
<Buttn style="{x:Null}"/>
关联事件处理程序
<Style x:key="MouseOverHighLightStyle">
<EventSetter Event="TextBlock.MouseEnter" Handler="element_MouseEnter"/>
</Style>
private void element_MouseEnter(object sender,MouseEventArgs)
{
//业务代吗 事件处理程序
}
多层样式
*BaseOn *属性来设置样式的继承
<Style x:Key="NewButtonStyle" BaseOn="ButtonBaseStyle"/>
BaseOn可创建完整的样式继承链,最后设置的同一属性会覆盖基样式,样式继承的依赖会使程序变得脆弱,不建议使用样式继承。
触发器
可自动完成简单的样式改变,需要使用样板事件处理逻辑。通过 Style.Triggers集合链接到样式中,继承System.Windows.TriggerBase。
TriggerBase的继承类
Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger
通过FrameworkElement.Triggers集合可以直接为元素应用触发器。
简单触发器
<Style x:key="TextBoxStyle" >
<Style.Setters>
<Setter Property="Control.Background" Value="Red"/>
</Style.Setters>
<Style.Triggers>
<Trigger Property="Control.IsFocus" Value="True" >
<Setter Property="Control.Backgroud" Value="Yellow"/>
</Trigger>
<Trigger Property="Control.IsPressed" Value="True">
<Setter Property="Control.Background" Value="Blue"/>
</Trigger>
</Style.Triggers>
</Style>
以上触犯器都触发了IsFocused和IsPressed属性,那么设置的背景颜色为Blue,这不在于那个属性先触发,而是取决于触发器在标记中的排列顺序。
<Style x:key="TextBoxStyle" >
<Style.Setters>
...
</Style.Setters>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Control.IsFocused" Value="True"/>
<Condition Property="Control.IsMouseOver" Value="True"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Control.Background" Value="Pink"/>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>
多条件的情况项不用关系声明的顺序,在改变背景颜色之前需要条件都为真。
事件触发器
<Style x:Key="BigFontButton">
<Style.Setters>
...
</Style.Setters>
<Style.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<EventTrigger.Actions>
<BeginStoryBoard>
<DoubleAnimation Duration="0:0:0.2"
Storyboard.TargetProperty="FontSize"
To="22"/>
</BeginStoryBoard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
DoubleAnimation为Double类型动画类,位于System.Windows.Media.Aniamtion,Storyboard为故事版,为动画提供时间线,内部可以定义一个或多个动画。动画在一定时间类修改依赖项属性。
WPF样式和触发器的更多相关文章
- WPF样式与触发器(3)
WPF中的各类控件元素, 都可以自由的设置其样式. 诸如: 字体(FontFamily) 字体大小(FontSize) 背景颜色(Background) 字体颜色(Foreground) 边距(Mar ...
- [No000012F]WPF(7/7) - 样式,触发器和动画
WPF Tutorial : Beginning [^] WPF Tutorial : Layout-Panels-Containers & Layout Transformation [^] ...
- wpf中的触发器详解
原文 http://zwkufo.blog.163.com/blog/static/25882512009724113250883/ 7.1.2 简单逻辑的表示--触发器(1) 在本章的多处介绍中都会 ...
- WPF样式(Style)入门
原文:WPF样式(Style)入门 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_34802416/article/details/78231 ...
- wpf中的触发器详解 (转自 乂乂的日志 - 网易博客)
2010-03-24 16:19:07| 分类: WPF相关 | 标签: |字号大中小 订阅 wpf中的触发器详解 WPF/C# 2009-08-24 11:32:50 7.1.2 简单 ...
- Bootstrap WPF Style,Bootstrap风格的WPF样式
简介 GitHub地址:https://github.com/ptddqr/bootstrap-wpf-style 此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CS ...
- 写自己的WPF样式 - 窗体
初试WPF样式,感觉还不错.上篇写完了按钮的样式下面写窗体,废话不多说直接上代码: (1)定义一个窗体样式"MyWpfWindow" <Style x:Key="M ...
- C#工具:Bootstrap WPF Style,Bootstrap风格的WPF样式
简介 GitHub地址:https://github.com/ptddqr/bootstrap-wpf-style 此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CS ...
- WPF样式——经典博客
WPF样式博客:http://www.cnblogs.com/luluping/archive/2011/05/06/2039498.html
随机推荐
- 【Spring AOP】暴力打通两个切面之间的通信
场景描述 在秒杀微服务中,笔者在需要各种校验前端传来的参数后,通过 Redis 加锁限流(切面A)并返回,最后封装订单数据推送到 RabbitMQ 消息队列(切面B)做善后工作. 问题:如何将 切面 ...
- 学习saltstack (二)
saltstack使用教程: 1.安装: 需要epel的yum源,没有的话把下面的复制并新建个文件 /etc/yum.repos.d/epel.repo 粘贴即可: [epel] name=Extra ...
- 单片机ram和rom的区别
单片机运行时需要调用某个程序/函数/固定数据时就需要读取ROM,然后在RAM中执行这些程序/函数的功能,所产生的临时数据也都存在RAM内,断电后这些临时数据就丢失了.ROM:(Read Only Me ...
- android JS 互相通讯
1.android中利用webview调用网页上的js代码. Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true ...
- ES6-11学习笔记--字符串的扩展
字符的Unicode表示法 字符串的遍历器接口 ****重点****模板字符串 String.fromCodePoint() String.prototype.includes() String.pr ...
- 2022DASCTF X SU 三月春季挑战赛 Calc
查看代码 #coding=utf-8 from flask import Flask,render_template,url_for,render_template_string,redirect,r ...
- 【weex开发】环境配置流程
1,安装node.js node官网下载,然后安装即可. 安装完成以后可以查看node和npm版本 $ node -v v6.11.3 $ npm -v 3.10.10 2,安装weex-toolki ...
- java中Object类是怎么回事,干嘛使的?举例说明!
Object类的作用:m a r k - t o- w i n: 在java中,因为所有的类都有共性,所以java的缔造者们把java设计成这样:所有的类都是Object类的直接或间接子 ...
- 横竖屏切换android:screenOrientation属性的使用
在开发android的应用中,有时候需要限制横竖屏切换,只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制. android:sc ...
- java中String类的用法
1.String String类很常用,很重要. String不像int或float, 它是参考类型.final类型, 不能被继承,String is a Reference Type,Defined ...