更改禁用列表框背景为灰色(Change disabled listbox background to

2019-08-19 03:05发布

我有一个ListBox ,我需要变灰被禁用时。 每个用户请求时,它是不够的,禁用它,但它也有出现不同。 耸肩我看了其他几个地方,跟着例子,它好像它应该工作,但事实并非如此。 下面是一些例子我看了看: 例1 , 例2 。

这里是我的代码:

<Style x:Key="ListBoxStyle" TargetType="ListBox">
 <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBox}">
                <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="BorderBrush" Value="Black"></Setter>
                        <Setter Property="Foreground" Value="LightGray"></Setter>
                            <Setter Property="Background" Value="LightGray"></Setter>
                        <Setter Property="BorderBrush" Value="LightGray"></Setter>
                    </Trigger>
                 </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>                 
 </Style>

这似乎相当简单。 我做了相同的基本过程ComboBoxTextBox成功。 谁能帮我看在我的代码是错误的? 如何正确地做到这一点的一个例子将是巨大的。 上面列出的第一个例子似乎正是我需要的,但正确答案是“要做到这一点的唯一方法是通过重写模板”,这并不能帮助我。

我已经尝试了几种简单的解决方案。 这是可能的一些其他风格可能会影响这一点,因为我们正在与几个不同的资源字典工作。 有谁知道什么可能是跟踪下来的好办法?

编辑:我做了整个解决方案的唯一地方ListBox中正在使用的搜索是我的一部分,它的被风格化的唯一地方是我设置的样式。 根据MSDN没有一个列表框的“零件”,所以这是不可能的我无意中风格ListBox的部分造型的过程中其他一些控制。 由于没有造型,当我禁用列表框,它是冻结,但没有文字可见,并且有一个默认的背景。 当我尝试应用属性=“背景” VALUE =“浅灰色”似乎被隐藏(即无所不可见)。 如果有人知道为什么可以这样做或如何完成我的任务,我会很感激的帮助。

Answer 1:

我不认为你需要重写ControlTemplate ,只是增加一个Style.Trigger为我工作得很好。

例:

   <ListBox>
        <ListBox.Style>
            <Style TargetType="{x:Type ListBox}">
                <Style.Triggers>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Foreground" Value="LightGray" />
                        <Setter Property="Background" Value="LightGray" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListBox.Style>
    </ListBox>


Answer 2:

sa_ddam213的回答并没有为我工作,所以我想我会添加什么,我发现我不得不这样做。 就我而言,我已经建立透明的背景,但是当我关闭箱会变成灰色。 我希望能够控制列表框的背景时,控制被禁用,并在这里是我的发现工作。

注意:对于你的情况,你会想改变透明色,以任何你想要的灰色的阴影。
注2:如果你没有改变的模板列表框这将有可能只工作。 (改变的DataTemplate是确定)。

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


文章来源: Change disabled listbox background to gray