属性触发器是在当某个依赖属性的值发生变化时触发执行一个Setter的集合,当属性失去这个值时,这些被触发执行的Setter集合会自动被撤销。只能在样式或模板中定义属性触发器。下边的例子设置了当鼠标放置于按钮之上悬停时,按钮的前景色由红色变为蓝色:
<Window.Resources>
<Style x:Key="buttonstyle1" TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="#FFFF0000" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="#FF0000FF"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Canvas>
<Button Canvas.Left="142" Canvas.Top="100" FontFamily="Webdings" FontSize="25" Content="3" Style="{StaticResource buttonstyle1}"/>
</Canvas>
但是如果我们已经在Button里指定了Foreground属性,如下面底线字所示,则此触发器是不起作用的:
<Window.Resources>
<Style x:Key="buttonstyle1" TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="#FFFF0000" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="#FF0000FF"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Canvas>
<Button Canvas.Left="142" Canvas.Top="100" FontFamily="Webdings" FontSize="25" Content="3" Foreground="#FF00FF00" Style="{StaticResource buttonstyle1}"/>
</Canvas>
说明如果在控件本身的属性里已经设置了某个相关属性,则在样式中通过Setter设定同样的相关属性将不会被应用。这是因为本地属性集在设置时具有最高优先级(动画值和强制转换值除外),其优先级高于任何样式或控件模板,而在样式中,触发器具有优先级,然后才是样式中Setter设置的值,具体请参照MSDN依赖项属性值设置优先级列表。
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号