WPF Style Trigger
1.1 基本 Trigger

<Window.Resources>
<Style TargetType="{x:Type CheckBox}">
<Style.Triggers>
<Trigger Property="IsChecked" Value="true">
<Setter Property="Foreground" Value="Orange"></Setter>
<Setter Property="FontSize" Value="10"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel>
<CheckBox Content="----------------------"></CheckBox>
<CheckBox Content="++++++++++++++++++++++"></CheckBox>
<CheckBox Content="======================"></CheckBox>
<CheckBox Content="______________________"></CheckBox>
</StackPanel>
1.2 MultiTrigger
多条件同时满足才会触发

<Window.Resources>
<Style TargetType="{x:Type CheckBox}">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsChecked" Value="true"></Condition>
<Condition Property="Content" Value="小桥流水人家"></Condition>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="FontSize" Value="15"></Setter>
<Setter Property="Foreground" Value="Red"></Setter>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel>
<CheckBox Content="枯藤老树昏鸦"></CheckBox>
<CheckBox Content="小桥流水人家"></CheckBox>
<CheckBox Content="古道西风瘦马"></CheckBox>
<CheckBox Content="断肠人在天涯"></CheckBox>
</StackPanel>
1.3 DataTrigger

注意 ,绑定的值是一个长度。长度无法拍断,所以我们需要 使用Converter
<Window.Resources>
<local:LengthConverter x:Key="lc"></local:LengthConverter>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self},Path=Text.Length,Converter={StaticResource lc} }" Value="false">
<Setter Property="BorderBrush" Value="Red"></Setter>
<Setter Property="BorderThickness" Value="1"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel>
<TextBox Height="40" Margin="0,0,0,10" MouseEnter="TextBox_MouseEnter"></TextBox>
<TextBox Height="40" Margin="0,0,0,10"></TextBox>
<TextBox Height="40"></TextBox>
</StackPanel>
public class LengthConverter : IValueConverter
{
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int len = (int)value;
bool check = len > 6 ? true : false;
return check;
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
1.4 MultiDataTrigger

<Window.Resources>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding id}"></TextBlock>
<TextBlock Text="{Binding name}"></TextBlock>
<TextBlock Text="{Binding age}"></TextBlock>
<TextBlock Text="{Binding isman}"></TextBlock>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=id}" Value="3"></Condition>
<Condition Binding="{Binding Path=name}" Value="王五"></Condition>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Background" Value="Orange"></Setter>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
<c:ArrayList x:Key="list">
<local:StudentItem id="1" name="張三" age="10" isman="True"></local:StudentItem>
<local:StudentItem id="2" name="李四" age="20" isman="False"></local:StudentItem>
<local:StudentItem id="3" name="王五" age="30" isman="True"></local:StudentItem>
<local:StudentItem id="4" name="孫六" age="40" isman="False"></local:StudentItem>
<local:StudentItem id="5" name="周七" age="50" isman="True"></local:StudentItem>
<local:StudentItem id="6" name="趙四" age="60" isman="True"></local:StudentItem>
<local:StudentItem id="7" name="錢八" age="70" isman="False"></local:StudentItem>
</c:ArrayList>
</Window.Resources>
<Grid>
<ListBox ItemsSource="{StaticResource list}"></ListBox>
</Grid>
1.5 EventTrigger 事件触发器,这是触发器里面最特殊的一个
首先它不是由属性或者内容的变化而触发
其次触发后它并不是应用一组Setter,而是触发一段动画,因此UI层的动画效果往往和EventTrigger有关


<Window.Resources>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="150" Duration="0:0:0:2" Storyboard.TargetProperty="Height"></DoubleAnimation>
<DoubleAnimation To="150" Duration="0:0:0:2" Storyboard.TargetProperty="Width"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="0:0:0:2" Storyboard.TargetProperty="Height"></DoubleAnimation>
<DoubleAnimation Duration="0:0:0:2" Storyboard.TargetProperty="Width"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Canvas>
<Button Height="40" Width="40" Content="OK"></Button>
</Canvas>

浙公网安备 33010602011771号