vdh*_*ant 14 wpf setter triggers styles
可以说我有以下内容:
<Style TargetType="{x:Type TextBox}">
<Setter Property="BorderThickness" Value="1" />
<Setter Property="BorderBrush" Value="Gray" />
<Style.Triggers>
<Trigger Property="IsFocused" Value="true">
<Setter Property="BorderBrush" Value="Green" />
<Setter Property="BorderThickness" Value="2" />
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
这很好用,这里没有太多错误,但这是一个相当简单的案例.如果我想将IsFocused风格状态列为exsplicit风格,如何将该风格引用为IsFocused风格,即
<Style x:key="ActiveStyle" TargetType="{x:Type TextBox}">
<Setter Property="BorderBrush" Value="Green" />
<Setter Property="BorderThickness" Value="2" />
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="BorderThickness" Value="1" />
<Setter Property="BorderBrush" Value="Gray" />
<Style.Triggers>
<Trigger Property="IsFocused" Value="true">
-- Here I want to reference ActiveStyle and not copy the copy the setters
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
Nic*_*ier 13
但是我不认为你可以这样重用一种风格:
<Style x:Key="ActiveStyle" TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="IsFocused" Value="true">
<Setter Property="BorderBrush" Value="Green" />
<Setter Property="BorderThickness" Value="2" />
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource ActiveStyle}">
<Setter Property="BorderThickness" Value="1" />
<Setter Property="BorderBrush" Value="Gray" />
</Style>
Run Code Online (Sandbox Code Playgroud)
我没有看到另一种解决方案:(
WPF为此FrameworkElement.FocusVisualStyle提供了一个特殊属性所以继续并分配:)
<TextBox FocusVisualStyle="{StaticResource ActiveStyle}" .....
Run Code Online (Sandbox Code Playgroud)
或者使用setter的另一种方式
<Style TargetType="{x:Type TextBox}">
<Setter Property="BorderThickness" Value="1" />
<Setter Property="BorderBrush" Value="Gray" />
<Setter Property="FocusVisualStyle" >
<Setter.Value>
<Style x:key="ActiveStyle" TargetType="{x:Type TextBox}">
<Setter Property="BorderBrush" Value="Green" />
<Setter Property="BorderThickness" Value="2" />
</Style>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
还有第三种方法可以做到这一点.
为您的控件创建两个命名控件模板:
<ControlTemplate x:Key="NotFocused" TargetType="{x:Type TextBox}">
. . .
</ControlTemplate>
<ControlTemplate x:Key="Focused" TargetType="{x:Type TextBox}">
. . .
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
然后为TextBox创建一个默认样式,其中包含触发器:
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Template" Value="{StaticResource Focused}" />
</Trigger>
<Trigger Property="IsFocused" Value="False">
<Setter Property="Template" Value="{StaticResource NotFocused}" />
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
托尼
| 归档时间: |
|
| 查看次数: |
30667 次 |
| 最近记录: |