【问题标题】:Textbox background color not applying from Style文本框背景颜色不适用于样式
【发布时间】:2016-11-01 11:50:47
【问题描述】:

我的文本框位于WPF 用户控件中,样式被应用为:

<ResourceDictionary Source="pack://application:,,,/MyStyles1;component/Themes/MyTheme.xaml"/>

样式如下:

<Style x:Key="OutputTextBoxStyle" TargetType="TextBox">
<Setter Property="FontSize" Value="15" />
<Setter Property="Background" Value="Green" />
<Setter Property="Foreground" Value="Blue" />
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="BorderThickness" Value="15" />
<Setter Property="Padding" Value="2" />
</Style>

请注意,所有属性(例如 Foreground、BorderBrush、BorderThickness 等)都按要求工作。 但没有应用 TextBox 背景。

请帮忙。

【问题讨论】:

    标签: wpf xaml background


    【解决方案1】:

    有两种方法可以给文本框设置这种样式:

    1. 显式使用:

      <TextBox Style="{StaticResource OutputTextBoxStyle}" />
      

      当项目中只有少数文本框需要应用这种样式时,这是通常的方式。

    2. 隐式使用隐式样式。要使隐式样式起作用,您的定义不应包含 x:Key 定义。

      因此,您可以像这样添加第二个定义:

      <Style TargetType="TextBox"
             BasedOn="{StaticResource OutputTextBoxStyle}" />
      

      或从现有样式中删除 x:Key 定义。

      如果您想从其他地方显式引用样式,则需要执行前者。

    您还可以通过指定样式的特定部分来覆盖它:

    <TextBox Style="{StaticResource OutputTextBoxStyle}"
             Background="{Aqua}" />
    

    <TextBox Background="{Aqua}" />
    

    【讨论】:

    • 我需要明确引用样式。所以我应该给一个 x:Key。但奇怪的是,当我设置为绿色时,背景再次显示为白色。 TextBox 定义为
    • @Singh - 当我明确设置样式时,它工作正常。您还有其他可能覆盖背景的内容吗?
    • 我可以确认项目中的其他任何地方都没有为文本框定义其他样式。你有什么提示让我检查覆盖吗?仅供参考,我正在使用 Prism UnityBootstrapper、Modules 并从 Module 项目中访问样式(只是为了检查这些是否对这种行为有任何影响)。
    • @Singh - 除了在有问题的文本框中寻找明确的 Background="{...}" 之外,没有。
    • 抱歉,您上次回复的内容不清楚?检查直接给文本框背景颜色,它工作正常。此外,我们在项目中没有更多的 Background="{..}"。
    【解决方案2】:

    编辑:我现在才注意到你通过 cmets 与 Chris 讨论过这个问题,他几乎问你我在下面问了什么。

    和我一起工作:

    <Window.Resources>
        <Style x:Key="OutputTextBoxStyle" TargetType="TextBox">
            <Setter Property="FontSize" Value="15" />
            <Setter Property="Background" Value="Green" />
            <Setter Property="Foreground" Value="Blue" />
            <Setter Property="BorderBrush" Value="Red" />
            <Setter Property="BorderThickness" Value="15" />
            <Setter Property="Padding" Value="2" />
        </Style>
    </Window.Resources>
    <Grid>
        <TextBox Text="123123" HorizontalAlignment="Left" VerticalAlignment="Top"  Style="{DynamicResource OutputTextBoxStyle}"/>
    </Grid>
    

    您的 TextBox 的实际外观如何 (XAML)?

    我怀疑您设置了 Background 属性,该属性覆盖了您样式中的值。

    【讨论】:

    • 感谢您的回复。我想,我已经发现了这个问题。当我在 App.XAML 中评论 行时,文本框背景按预期出现。现在需要获取我的样式 OutputTextBoxStyle 应该可以保持上述 Telerik 主题(未注释)。即如何使用 OutputTextBoxStyle 覆盖所有样式?如果我走错了路,请纠正我?
    • 通常,您可以从不同的库中加载任意数量的样式,只要它们不共享相同的 Key,这会导致最后一个加载的样式覆盖具有相同 Key 的另一种样式。尝试将您的 OutputTextBoxStyle 重命名为其他名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2023-03-18
    相关资源
    最近更新 更多