我对此进行了大量搜索并最终没有回答。
以下是我的一些搜索结果:
Setting combo box foreground color for the disabled state
WPF combobox disabled background color
WPF ComboBox: background color when disabled
有些人说它有效,但有些人说没有。我试过了,我是第一种。那么究竟如何让它发挥作用呢?我搜索了msdn,答案是复制并粘贴标准模板然后修改它。
确定它会起作用,但我只需要改变颜色。对花生来说太复杂了。我自己制作了一个快速自包含xaml的程序,在我的框中,它不起作用:
<Window x:Class="WpfApplication11.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ComboBox Margin="0,0,170,253">
<ComboBox.Style>
<Style TargetType="ComboBox">
<Setter Property="IsEnabled" Value="{Binding IsChecked, ElementName=tgb}"/>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" Value="#FF000000"/>
</Trigger>
<Trigger Property="IsEnabled" Value="true">
<Setter Property="Background" Value="#FF474747"/>
</Trigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
<ToggleButton x:Name="tgb" Margin="347,218,10,10"/>
</Grid>
</Window>
单击切换按钮时, IsEnabled
切换,当禁用时,组合框应为黑色,而不是。
最令人困惑的部分是,IsEnabled
上的触发器是真的有效,但是虚假的触发器不起作用。
有人可以告诉我如何解决这个问题吗?
我现在正在使用.net 4.5.1,visual studio 2013。
答案 0 :(得分:0)
问题是,当VisualState更改为Disabled时,默认模板将使一个矩形可见(不透明度为0.55)位于控件之上。
<Rectangle x:Name="DisabledVisualElement" RadiusX="3" RadiusY="3" Fill="White" Opacity="0" IsHitTestVisible="false" />
<vsm:VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimation Duration="00:00:00" Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="(UIElement.Opacity)" To=".55"/>
</Storyboard>
</vsm:VisualState>
这就是为什么你的风格中的触发器没有效果。 这是默认模板的链接: ComboBox template
最好的方法是(如你所说)用你自己的方式覆盖完整的模板。您可以将默认模板复制到项目中,并更改我上面发布的代码。