我有一个ListBox
,当它被禁用时我需要变灰。根据用户请求,禁用它是不够的,但它也必须以不同的方式显示。 shrugs 我在其他几个地方看过并按照示例进行操作,看起来好像应该有效,但事实并非如此。以下是我查看的一些示例:Example1,Example2。
这是我的代码:
<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正在使用的唯一地方是我的部分,它唯一被设置样式的地方就是我设置的样式。根据{{3}},没有ListBox的“部分”,所以我不可能在为其他控件设置样式的过程中无意中设置了ListBox的一部分。没有样式,当我禁用ListBox时,它被冻结但没有文本可见,并且具有默认背景。当我尝试应用Property =“Background”Value =“LightGray”时,它似乎被隐藏(即没有任何东西可见)。如果有人知道为什么会这样做或如何完成我的任务,我会很感激帮助。
答案 0 :(得分:10)
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>
答案 1 :(得分: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>
答案 2 :(得分:1)
两个答案对我来说都不是很有效,所以我找到了一种解决方案,该方案会覆盖对我有用的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>