很简单的一个例子,跑一下就明白了
一般我们最常见的是A的某个属性改变,引发A的另一属性改变。
这个是 A控件的属性改变,引发B控件跟着变 ,通过DataTigger来达到目的
<Window x:Class="TriggerDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TriggerDemo"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid Margin="50,130">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="40"/>
</Grid.ColumnDefinitions>
<Button Content="asdfasdfadsfa" Background="Aquamarine">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="bd" BorderBrush="Black" Background="{TemplateBinding Background}" BorderThickness="1" CornerRadius="6,0,0,6" >
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Text="{TemplateBinding Content}"/>
</Border>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding ElementName=btn2,Path=IsMouseOver}" Value="True">
<Setter TargetName="bd" Property="Background" Value="Yellow"/>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
<Button x:Name="btn2" Grid.Column="2" Command="{Binding MainCommand}" Background="Beige">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}" BorderThickness="0,1,1,1" CornerRadius="0,6,6,0" >
<Path Data="M 0,0 L 20,0 L 10,10 Z" Fill="Black" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
</Grid>
</Window>
这里有个问题是关于Visibility这个属性,存在bug
需求是:鼠标移到A控件上,显示B控件,B默认隐藏
若默认设置将B控件的visibility=hidden, 通过触发器来visiable, 做不到,试了半天就是不行
方法是A. isMouseOver=true, B.visibility=hidden ,做不到,试了半天就是不行
但是换种方式,A. isMouseOver=False, B.visibility=Hidden
也就是说,鼠标移出A控件,则B隐藏,B默认显示, 那就相当于,移入A控件,让B显示,反向的达到了目的