【问题标题】:Disabling Listbox is not changing background color in style禁用列表框不会改变样式的背景颜色
【发布时间】:2012-02-23 11:02:55
【问题描述】:

ListBox 被禁用时,我有这种简单的样式不会改变ListBox Background

<Style TargetType="ListBox" >                    
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="True">
            <Setter Property="Background" Value="Red"/>
        </Trigger>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Background" Value="Orange"/>
        </Trigger>
    </Style.Triggers>
</Style>

Snoop 在这方面对我没有帮助,如果不覆盖模板,我无法找到一种简单的方法。任何人都有一个简单的方法来得到这个工作? TIA。

【问题讨论】:

  • 您是否也为 ListBox 本身设置了背景?
  • @H.B - 然后他会覆盖他的风格
  • ListBox 颜色奇怪。这篇文章可能会引导你回答。 stackoverflow.com/questions/7298282/…
  • @MyKuLLSKI:这正是我的观点。
  • @H.B. - 我还是不明白你的评论。触发器除了 IsEnabled = False 之外有效,所以他为什么要覆盖他的风格。他需要做一个模板

标签: wpf background listbox styles disabled-control


【解决方案1】:

当列表框被禁用时,您可以通过更改内置模板使用的颜色来更改列表框本身的背景颜色。您可以通过样式资源来做到这一点。只需将以下代码粘贴到您的 Listbox 元素中,当您禁用该框时背景将是透明的。

<ListBox.Style>
    <Style TargetType="{x:Type ListBox}">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
        </Style.Resources>
    </Style>
</ListBox.Style>

当单个项目突出显示和框失去焦点时想要修改它的背景颜色也是很常见的。要更改这些,您可以参考这篇文章: https://stackoverflow.com/a/7298301/1721136

【讨论】:

    【解决方案2】:

    做到这一点的唯一方法是覆盖模板

    【讨论】:

    • 看起来是唯一的出路。
    • 能否分享您覆盖 ListBox 模板的工作示例代码。因为在我覆盖 ListBox 模板后它对我不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2014-06-21
    • 2014-04-21
    • 2021-01-23
    • 2011-06-15
    相关资源
    最近更新 更多