您的位置:首页 > Web前端 > CSS

WPF 样式触发器

2011-09-28 15:38 323 查看
触发器
1.属性触发器

当某属性有一特定值,属性触发器执行一个Setter。当属性失去这个值时,属性触发器重做该Setter。

<StackPanel.Resources>
<!-- 通过Style的属性触发器改变按钮鼠标经过样式 -->
<Style x:Key="buttonStyle" TargetType="{x:Type Button}">
<Style.Triggers>
<!-- 按钮鼠标经过 -->
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="RenderTransform">
<Setter.Value>
<RotateTransform Angle="10"/>
</Setter.Value>
</Setter>
<Setter Property="Foreground" Value="Black"/>
</Trigger>
</Style.Triggers>
<!-- 正常样式 -->
<Setter Property="Width" Value="50"/>
<Setter Property="Height" Value="50"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Background" Value="BurlyWood"/>
</Style>

<!-- 通过Style的属性触发器改变绑定验证规则失败时文本框样式 -->
<Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">
<Style.Triggers>
<!-- 文本框绑定内容验证失败 -->
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="Background" Value="Red"/>
<!-- 通过RelativeSource获取任何应用了此样式的元素的ErrorContent -->
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
<!-- 正常样式 -->
<Setter Property="Background" Value="Azure"/>
</Style>
</StackPanel.Resources>

<Button Name="but" Style="{StaticResource buttonStyle}">Button</Button>
<TextBox Name="txt" Style="{StaticResource textBoxStyle}">
<TextBox.Text>
<Binding ElementName="but" Path="Content">
<!-- 绑定自定义验证规则 -->
<Binding.ValidationRules>
<local:JpgValidation/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>


2.数据触发器

同属性触发器,但数据触发器可由任何.NET属性触发意外,而非仅由依赖属性触发。

<StackPanel.Resources>
<Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">
<Style.Triggers>
<!-- 当文本框值为disabled时,设置文本框不可用 -->
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}" Value="disabled">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
<!-- 用输入值设置文本框背景色 -->
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=Text}"/>
</Style>
</StackPanel.Resources>

3.事件触发器

建设中...

4.用触发器表示更多的复杂逻辑

<StackPanel.Resources>
<Style x:Key="textBoxStyle2" TargetType="{x:Type TextBox}">
<Style.Triggers>
<!-- 逻辑或,当鼠标经过或获取焦点,设置前景色为红 -->
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Red"/>
</Trigger>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Foreground" Value="Red"/>
</Trigger>

<!-- Trigger变体 -->
<MultiTrigger>
<!-- 逻辑且,当鼠标经过且获取焦点,设置背景色为绿 -->
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsFocused" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Background" Value="Green"/>
</MultiTrigger>
</Style.Triggers>
</Style>
</StackPanel.Resources>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: