5

我有一个ListBox在禁用时需要变灰的。根据用户请求,仅禁用它是不够的,但它也必须以不同的方式出现。耸耸肩 我在其他几个地方看过并遵循了这些例子,似乎它应该工作,但它没有。以下是我查看的一些示例:Example1Example2

这是我的代码:

<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>

这似乎相当简单。我成功地完成了相同的基本ComboBox过程TextBox。谁能帮我看看我的代码哪里错了?如何正确地做到这一点的一个例子会很棒。上面列出的第一个示例似乎正是我所需要的,但正确的答案是“唯一的方法是覆盖模板”,这对我没有帮助。

我已经尝试了几种简单的解决方案。由于我们正在使用几个不同的资源字典,因此其他一些样式可能会影响这一点。有谁知道什么是追踪这个的好方法?

编辑: 我对整个解决方案进行了搜索,唯一使用 ListBox 的地方是我的部分,唯一设置样式的地方是我设置的样式。根据MSDN,ListBox 没有“部分”,因此在为其他控件设置样式的过程中,我不可能无意中设置了 ListBox 的一部分。没有样式,当我禁用 ListBox 时,它被冻结但没有文本可见,并且具有默认背景。当我尝试应用 Property="Background" Value="LightGray" 时,它似乎是隐藏的(即什么都不可见)。如果有人知道它为什么会这样做或如何完成我的任务,我将不胜感激。

4

3 回答 3

11

sa_ddam213 的回答对我不起作用,所以我想我会添加我发现我必须做的事情。就我而言,我设置了透明背景,但是当我禁用该框时,它会变成灰色。当控件被禁用时,我希望能够控制列表框的背景,这就是我发现的工作。

注意:对于您的情况,您需要将透明颜色更改为您想要的任何灰色阴影。
注意2:这可能仅在您没有更改列表框模板的情况下才有效。(更改数据模板是可以的)。

<ListBox.Style>
    <Style TargetType="{x:Type ListBox}">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
        </Style.Resources>
    </Style>
</ListBox.Style>
于 2013-06-12T22:06:41.143 回答
3

这两个答案对我都不起作用,所以我找到了一个解决方案,它覆盖了对我有用的 ControlTemplate:

            <Style TargetType="{x:Type ListBox}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListBox}">
                            <Grid Width="Auto" Height="Auto">
                                <Border x:Name="Border" 
                                        BorderThickness="1"/>
                                <ScrollViewer Focusable="false" IsTabStop="False" HorizontalScrollBarVisibility="Disabled">
                                    <StackPanel IsItemsHost="true"/>
                                </ScrollViewer>
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsEnabled" Value="false">
                                    <Setter TargetName="Border" Property="Border.Background" Value="{StaticResource DisabledBackgroundBrush}"/>
                                </Trigger>
                                <Trigger Property="IsGrouping" Value="true">
                                    <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="Background" Value="{StaticResource DefaultBackground}"/>
            </Style>

这对我有帮助:https ://social.msdn.microsoft.com/Forums/vstudio/en-US/4b033268-864e-488c-b371-80818daf7f71/can-i-override-the-disabled-background-color-for- a-listbox?forum=wpf

于 2019-12-10T20:06:41.613 回答
2

我认为您不需要覆盖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>
于 2013-04-02T21:18:24.237 回答