【转】【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/