使用触发器,可以动态地更改控件的外观,因为一些事件或属性值改变了。通常这都必须在代码中实现,使用WPF,也可以用XAML实现,而这只会影响UI。
1.属性触发器
属性触发器在属性值改变时激活。Style类有一个Triggers属性,通过它可以指定属性触发器。
<Window x:Class="WpfAppLearn1.Window4"
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:WpfAppLearn1"
mc:Ignorable="d" Title="Window4" Height="450" Width="800">
<Canvas HorizontalAlignment="Left" Height="281" VerticalAlignment="Top" Width="679">
<Canvas.Resources>
<Style x:Key="tbStyle1" TargetType="TextBox">
<Setter Property="Background" Value="Aqua" />
<Setter Property="Foreground" Value="Chocolate" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="AliceBlue" />
<Setter Property="Text" Value="Hello" />
</Trigger>
</Style.Triggers>
</Style>
</Canvas.Resources>
<TextBox Style="{StaticResource tbStyle1}" Height="23" Width="120" Canvas.Left="175" Canvas.Top="107" />
</Canvas>
</Window>
上述代码,当鼠标移入TextBox时,将背景色改为AliceBlue,文本改为Hello。当 鼠标移出TextBox时,样式会恢复本来的效果,这里就会将背景色重新设置为Aqua,文本变为空。
PS:触发器触发时要修改的值若不是控件的默认值,就必须在样式中定义,否则触发没效果。
<TextBox Style="{StaticResource tbStyle1}" Background="Beige" Height="23" Width="120" />
若是直接给TextBox定义背景色,当触发器激活时,并不会改变控件的背景色,文本效果还是可以触发的,若是直接定义文本不为TextBox(TextBox的Text默认值为TextBox)时也不会达到效果。
2.多触发器
属性的值变化时,就会激活属性触发器,如果因为两个或多个属性同时改变时激活

最低0.47元/天 解锁文章
1226

被折叠的 条评论
为什么被折叠?



