wpf - 应用默认 WPF 样式

标签 wpf styles

我有一个全局风格,设置了我所有的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/

相关文章:

c# - Datagrid奇怪的视觉效果

c# - 这样显示菜单方便吗?

c# - WPF TextBlock 文本绑定(bind)

javascript - React Javascript 根的样式背景颜色

WPF 嵌套样式

css - 不能超越 CSS 文本样式和图像向下移动吗?

c# - WPF DocumentViewer 覆盖打印按钮

wpf - 向初学者解释如何使用 VisualStateManager

css - 没有功能的列表样式图像

wpf - WPF中的自定义按钮模板