触发器
使用触发器,可以动态地更改控件的外观,因为一些属性值改变了。例如,用户把鼠标移动到按钮上,按钮就会改变其外观。通常,者必须在C#代码中实现,使用WPF,也可以用XAML实现,而这只会影响UI
XAML有几个触发器。
属性触发器在属性值改变时激活。
多触发器基于多个属性值。
事件触发器在事件发生时激活。
数据触发器在绑定的数据改变时激活。
属性触发器:
Style类有一个Triggers属性,通过它可以指定属性触发器。下面的示例,可以把代码赋值看一下效果。首先我们将一个Button元素放在Grid面板中。利用Window资源定义Button元素的默认样式。然后我们将Button的颜色设置为SkyBlue,将字体大小(fontSize)设置为17。这是启动时的样式。最后我们使用触发器改变控件的样式。
<Window.Resources>
<Style TargetType="Button">
<Setter Property="Background" Value="SkyBlue"/>
<Setter Property="FontSize" Value="17"/>
<Setter Property="Foreground" Value="White"/>
<!--定义触发器-->
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#e4c6d4"/>
<Setter Property="FontSize" Value="22"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Foreground" Value="SkyBlue"/>
<Setter Property="FontSize" Value="17"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<!--按钮-->
<Button Content="点击啊!" Width="200" Height="50" />
</Grid>
触发器在Style.Triggers元素中用Trigger元素定义。将一个触发器赋予IsMouseOver属性,另一个触发器赋予IsPressed属性。这两个属性通过应用了样式的Button类定义。
如果IsMouseOver属性的值是true,就会激活触发器,将Foreground属性设置为Red,将FontSize属性设置为22.如果按下该按钮,IsPressed属性就是true,激活第二个触发器,并将textBox的Foreground属性设置为SkyBlue。FontSize属性设置为17。
使用属性触发器,很容易改变控件的外观、字体、颜色、不透明度等。在鼠标滑过控件时,键盘设置焦点时——都不需要编写任何代码。
多触发器
属性的值变化时,就会激活属性触发器,如果因为两个或多个属性有特定的值,而需要设置触发器,就可以使用MultiTrigger。
MultiTrigger有一个Conditions属性,可以在其中设置属性的有效值。它还有一个个Setters属性,可以在其中指定需要设置的属性。
实例:
<Window.Resources>
<Style TargetType="TextBox">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsEnabled" Value="True"/>
<Condit