【转】【WPF】WPF样式(Style)—触发器
样式(Styles)由三部分构成:设置器(Setter)、触发器(Triggers)、资源(Resources)。
(1)触发器,让样式的使用更加准确、灵活和高效。
(2)触发器(Triggers)主要分为三类,属性触发器(检查从属属性即WPF元素自身属性)、数据触发器(检查任意可绑定的属性)、事件触发器(用于监听事件)。
属性触发器
检查从属属性的值,即WPF元素自身属性。比如按钮的内容、字体的大小、颜色等等。
<Window.Resources> <Style TargetType="Button"> <Style.Triggers> <Trigger Property="Content" Value="按钮"> <Setter Property="ToolTip" Value="这是一个按钮"> </Setter> </Trigger> </Style.Triggers> </Style> </Window.Resources>
多属性触发器
<Window.Resources> <Style TargetType="Button"> <Style.Triggers> <Trigger Property="Content" Value="按钮"> <Setter Property="ToolTip" Value="这是一个按钮"></Setter> </Trigger> <Trigger Property="Content" Value="Button"> <Setter Property="ToolTip" Value="This is a button"></Setter> </Trigger> </Style.Triggers> </Style> </Window.Resources>
多条件属性触发器
<Window.Resources> <Style TargetType="Button"> <Style.Triggers> <MultiTrigger> <!--条件列表--> <MultiTrigger.Conditions> <Condition Property="Content" Value="按钮"></Condition> <Condition Property="Visibility" Value="Visible"></Condition> </MultiTrigger.Conditions> <!--样式--> <Setter Property="ToolTip" Value="这是一个可见按钮"></Setter> </MultiTrigger> </Style.Triggers> </Style> </Window.Resources>
数据触发器
可以检查任意可绑定的属性,比如CLR对象属性、XPath声明等。相对于属性触发器,数据触发器通常用来检查不可见的对象属性。
<Window.Resources> <Style TargetType="Button"> <Style.Triggers> <DataTrigger Binding="{Binding Path=Name}" Value="李宝亨"> <Setter Property="Foreground" Value="Tomato"/> </DataTrigger> </Style.Triggers> </Style> </Window.Resources> <Grid> <Button Content="{Binding Path=Name}" Height="23" Margin="103,94,120,84" Name="button1" Width="75"/> </Grid>
定义的Person类
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new Person("李宝亨","21"); } class Person { string _Name; public string Name { get { return _Name; } set { _Name = value; } } string _Age; public string Age { get { return _Age; } set { _Age = value; } } public Person(string name,string age) { _Name = name; _Age = age; } } }
多条件数据触发器
<Window.Resources> <Style TargetType="Button"> <Style.Triggers> <MultiDataTrigger> <!--条件列表--> <MultiDataTrigger.Conditions> <Condition Binding="{Binding Path=Name}" Value="李宝亨"/> <Condition Binding="{Binding Path=Age}" Value="21"/> </MultiDataTrigger.Conditions> <Setter Property="Foreground" Value="Tomato"/> </MultiDataTrigger> </Style.Triggers> </Style> </Window.Resources> <Grid> <Button Content="{Binding Path=Name}" Height="23" Margin="103,94,120,84" Name="button1" Width="75"/> </Grid>
事件触发器
事件触发器用来监听事件。当一个事件发生时,事件触发器就会引发相关的动画事件来进行响应。
<Window.Resources> <Style TargetType="Button"> <Style.Triggers> <!--事件触发器--> <EventTrigger RoutedEvent="MouseEnter"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0.1" Duration="0:0:3"></DoubleAnimation> </Storyboard> </BeginStoryboard> </EventTrigger> </Style.Triggers> </Style> </Window.Resources>
原文地址:http://tianzengyan.blog.163.com/blog/static/1675840912012920105524490/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义