trigger主要运用的场景在Style、ControlTemplate、DataTemplate三个地方。在这些地方可以使用trigger,具体视情况而定。
1.属性触发器(Property Trigger)
一般用于自身Dependency Property的值发生改变时触发
2.数据触发器(DataTrigger)
Trigger都是专对于控件自身的依赖属性(dependency properties)。DataTrigger是一般专对于另的控件的属性,而且都是用绑定来实现的。
俩种用法
第一种:-支持Binding
<Style TargetType="Border">`
<Style.Triggers>
`<DataTrigger Binding="{Binding WindowState,RelativeSource={RelativeSource AncestorType=Window}}" Value="Normal">`
`<Setter Property="CornerRadius" Value="0,8,0,0"/>`
`</DataTrigger>`
`<DataTrigger Binding="{Binding WindowState,RelativeSource={RelativeSource AncestorType=Window}}" Value="Maximized">`
`<Setter Property="CornerRadius" Value="0"/>`
`</DataTrigger>`
</Style.Triggers>
`</Style>`
第二种:
`<Style TargetType="{x:Type ListBoxItem}">`
<Style.Triggers>
`<DataTrigger Binding="{Binding Path=Role}" Value="Admin">`
`<Setter Property="Foreground" Value="Red" />`
`</DataTrigger>`
</Style.Triggers>
</Style>
3.事件触发器(EventTrigger)
Eventtrigger一般用于动画效果的处理。上面俩个触发器作用对象都是属性。而这个却是作用于事件的。表示当前某个事件发生后要触发。
一般配合动画使用,它的内部不能是简单的Setter集合,而必须是TriggerAction的实例。
`<Grid>`
`<Button Margin="15" Width="200" Name="myButton">`
Click Me to Animate Drop Shadow!
<Button.BitmapEffect>
`<DropShadowBitmapEffect x:Name="myDropShadowBitmapEffect" Color="Black" ShadowDepth="0" />`
</Button.BitmapEffect>
<Button.Triggers>
`<EventTrigger RoutedEvent="Button.Click">`
`<BeginStoryboard>`
`<Storyboard>`
`<ThicknessAnimation Storyboard.TargetProperty="Margin" Duration="0:0:0.5"
From="50,50,50,50" To="0,0,50,50" AutoReverse="True" />`
`<DoubleAnimation Storyboard.TargetName="myDropShadowBitmapEffect"
Storyboard.TargetProperty="ShadowDepth"
From="0" To="30" Duration="0:0:0.5" AutoReverse="True" />`
`<DoubleAnimation Storyboard.TargetName="myDropShadowBitmapEffect"
Storyboard.TargetProperty="Softness"
From="0" To="1" Duration="0:0:0.5" AutoReverse="True" />`
`</Storyboard>`
`</BeginStoryboard>`
`</EventTrigger>`
</Button.Triggers>
`</Button>`
`</Grid>`
--多条件触发器(MultiDataTrigger)
上面的触发器应该来讲算是比较简单而又常用。可是都是单个触发条件。我们在编写业务代码的时候,往往可以存在多个条件下的触发效果。所以上面的Trigger和DataTrigger就不能满足需求了。为了这种情况,WPF为Trigger提供了MultiTrigger,为DataTrigger提供了MultiDataTrigger。除了语法上有一定的区别以外,效果是一样子的。
`<TextBlock Text="I am Aomi" Width="75" Height="20">`
<TextBlock.Style>
`<Style TargetType="TextBlock">`
<Style.Triggers>
`<MultiTrigger>`
<MultiTrigger.Conditions>
`<Condition Property="IsEnabled" Value="True" />`
`<Condition Property="IsMouseOver" Value="True" />`
</MultiTrigger.Conditions>
`<Setter Property="Background" Value="#4d4d4d" />`
`</MultiTrigger>`
</Style.Triggers>
`</Style>`
</TextBlock.Style>
`</TextBlock>`
MultiDataTrigger的用法
`<TextBlock Text="I am Aomi" Width="75" Height="20">`
<TextBlock.Style>
`<Style TargetType="TextBlock">`
<Style.Triggers>
`<MultiDataTrigger>`
<MultiDataTrigger.Conditions>
`<Condition Binding="{Binding IsChecked,ElementName=Changer }" Value="True" />`
`<Condition Binding="{Binding IsMouseOver,RelativeSource={RelativeSource Self} }" Value="True" />`
</MultiDataTrigger.Conditions>
`<Setter Property="Foreground" Value="Red" />`
`</MultiDataTrigger>`
</Style.Triggers>
`</Style>`
</TextBlock.Style>
`</TextBlock>`
标签:触发,触发器,DataTrigger,MultiDataTrigger,Trigger,WPF
From: https://www.cnblogs.com/ckblogs/p/17737996.html