我有一个全局风格,设置了我所有的TextBox
样式,但在某些情况下,我只想将前景色恢复为原始的非自定义样式颜色。我尝试使用 {TemplateBinding Foreground}
里面具体TextBoxes
我想恢复。它最终不是有效的 XAML,我不确定这是否是正确的方式。
有任何想法吗?谢谢。
最佳答案
有几种方法可以做到这一点。如果您查看 Precedence List在 MSDN 上
那么你可以看到在方式 1-8 中设置的 Forground 将覆盖 Foreground
从默认样式。最简单的方法是在 TextBox
中设置本地值.
<TextBox Foreground="Red" />
您可以做的另一件事是使用
'BasedOn'
样式的属性以覆盖其他版本。这确实需要为您的默认样式提供一个键值,但这也可以用于应用默认样式,如下例所示: <Style TargetType="{x:Type TextBox}"
x:Key="myTextBoxStyle">
<Setter Property="Foreground"
Value="Red" />
<Setter Property="FontWeight"
Value="Bold" />
</Style>
<!-- Style applies to all TextBoxes -->
<Style TargetType="{x:Type TextBox}"
BasedOn="{StaticResource myTextBoxStyle}" />
<TextBox Text="Hello">
<TextBox.Style>
<Style BasedOn="{StaticResource myTextBoxStyle}" TargetType="{x:Type TextBox}">
<Setter Property="Foreground"
Value="Blue" />
</Style>
</TextBox.Style>
</TextBox>
编辑:
如果默认样式正在应用一个值并且您想将其还原为基本值,我可以想到几种方法来获得这种行为。据我所知,您不能以通用方式绑定(bind)回默认主题值。
然而,我们可以做一些其他的事情。如果我们需要样式不应用某些属性,我们可以将样式设置为
{x:Null}
,从而停止应用默认样式。或者我们可以给元素它自己的样式,而不是从基本样式继承,然后只重新应用我们需要的 setter : <TextBox Text="Hello" Style="{x:Null}" />
<TextBox Text="Hello">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="FontWeight"
Value="Bold" />
</Style>
</TextBox.Style>
</TextBox>
我们可以修改默认样式,以便仅在某些条件下设置 Foreground,例如 Tag 为某个值。
<Style TargetType="{x:Type TextBox}"
x:Key="myTextBoxStyle">
<Setter Property="FontWeight"
Value="Bold" />
<Style.Triggers>
<Trigger Property="Tag"
Value="ApplyForeground">
<Setter Property="Foreground"
Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
<TextBox Text="Hello" />
<TextBox Text="Hello" Tag="ApplyForeground" />
关于wpf - 应用默认 WPF 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/945633/