网络知识 娱乐 25.WPF 触发器

25.WPF 触发器

摘要


WPF中的触发器——Trigger。触发器,是指在既定条件或者特殊场景下被触发,从而去执行一个操作。在WPF中,触发器可以分为以下几类:基本触发器(Trigger);事件触发器(EventTrigger);数据触发器(DataTrigger);多条件触发器(MultiTrigger,MultiDataTrigger)。

正文


Trigger简单触发器

最简单,也是最基础的触发器,可以检测依赖属性的变化,然后根据setter中设置的样式进行改变。

<StackPanel>n <Border Width="200" Height="200" >n <Border.Style>n <Style TargetType="Border">n <Style.Setters>n <Setter Property="Background" Value="Green"></Setter>n <Setter Property="BorderBrush" Value="Blue"></Setter>n <Setter Property="BorderThickness" Value="1"></Setter>n </Style.Setters>n <Style.Triggers>n <Trigger Property="IsMouseOver" Value="True">n <Setter Property="Background" Value="Yellow"></Setter>n <Setter Property="BorderBrush" Value="Red"></Setter>n <Setter Property="BorderThickness" Value="2"></Setter>n </Trigger>n </Style.Triggers>n </Style>n </Border.Style>n </Border>n</StackPanel>

因为WPF允许在多个地方设置依赖属性的值,那么自然会涉及优先级的问题,也就是说本地属性的优先级要高于setter设置的值,而默认Style Setter的优先级又高于默认Style Trigger中设置的值,这种优先级别在所有的触发器中均适用。

如果我们在<Border Width="200" Height="200" BorderThickness="1" BorderBrush="Blue" >后,你会发现,IsMouseOver事件时,Border的框并没有变。

25.WPF 触发器

下图为优先级

25.WPF 触发器

<Window.Resources>n <Style x:Key="BigFont">n <Style.Setters>n <Setter Property="Control.FontFamily" Value="Timers New Roman"></Setter>n <Setter Property="Control.FontSize" Value="40"></Setter>n <Setter Property="Control.FontStretch" Value="UltraCondensed"></Setter>n <Setter Property="Control.Background" Value="Green"></Setter>n </Style.Setters>n <Style.Triggers>n <Trigger Property="Control.IsFocused" Value="True">n <Setter Property="Control.Foreground" Value="Red"></Setter>n </Trigger>n </Style.Triggers>n </Style>n</Window.Resources>n<StackPanel>n <Button Content="Button" Margin="20" Style="{StaticResource BigFont}"></Button>n</StackPanel>25.WPF 触发器

MultiTrigger多条件触发器

多条件触发器其实就是普通触发器进行简单的组合,然后进行&&预算,当所有的条件满足后出发Setter中设置的属性

<Window.Resources>n <Style x:Key="BigFont">n <Style.Setters>n <Setter Property="Control.FontFamily" Value="Timers New Roman"></Setter>n <Setter Property="Control.FontSize" Value="40"></Setter>n <Setter Property="Control.FontStretch" Value="UltraCondensed"></Setter>n <Setter Property="Control.Background" Value="Green"></Setter>n </Style.Setters>n <Style.Triggers>n <MultiTrigger>n <MultiTrigger.Conditions>n <Condition Property="Control.IsFocused" Value="True"></Condition>n <Condition Property="Control.IsMouseOver" Value="True"></Condition>n </MultiTrigger.Conditions>n <MultiTrigger.Setters>n <Setter Property="ItemsControl.Foreground" Value="Red"></Setter>n </MultiTrigger.Setters>n </MultiTrigger>n </Style.Triggers>n </Style>n</Window.Resources>n<StackPanel>n <Button Content="Button" Margin="20" Style="{StaticResource BigFont}"></Button>n</StackPanel>25.WPF 触发器

事件触发器

触发器的使用目的不是为了直接改变某个依赖属性的值,而是“缓慢”的改变,具有一个动画效果,用于触发故事板中的一段动画

<Window.Resources>n <Style x:Key="BigFont">n <Style.Setters>n <Setter Property="ItemsControl.FontFamily" Value="Times New Roman"></Setter>n <Setter Property="ItemsControl.FontSize" Value="10"></Setter>n </Style.Setters>n <Style.Triggers>n <EventTrigger RoutedEvent="Mouse.MouseEnter">n <BeginStoryboard>n <Storyboard>n <DoubleAnimation Duration="0:0:1" Storyboard.TargetProperty="FontSize" To="48"></DoubleAnimation>n </Storyboard>n </BeginStoryboard>n </EventTrigger>n <EventTrigger RoutedEvent="Mouse.MouseLeave">n <BeginStoryboard>n <Storyboard>n <DoubleAnimation Duration="0:0:1" Storyboard.TargetProperty="FontSize" To="10"></DoubleAnimation>n </Storyboard>n </BeginStoryboard>n </EventTrigger>n </Style.Triggers>n </Style>n</Window.Resources>n<StackPanel>n <Button Content="Button" Margin="10" Style="{StaticResource BigFont}"></Button>n</StackPanel>25.WPF 触发器

DataTrigger数据触发器

数据触发器同样是和触发器一样,当达到设置的某个条件时,进行样式的更改,或者动画的触发。

<StackPanel>n <TextBox Margin="10">n <TextBox.Style>n <Style TargetType="TextBox">n <Style.Setters>n <Setter Property="Foreground" Value="Green"/>n </Style.Setters>n <Style.Triggers>n <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=Text}" Value="wl9981@163.com">n <Setter Property="Foreground" Value="Red"/>n </DataTrigger>n </Style.Triggers>n </Style>n </TextBox.Style>n </TextBox>n</StackPanel>25.WPF 触发器