WPF:Style.Ssetter更改组合框颜色,赢得';t换回

本文关键字:赢得 换回 颜色 Style Ssetter 组合 WPF | 更新日期: 2024-05-04 15:41:46

我有一个组合框,我正在用Visibility属性上的Style.Ssetter隐藏和显示:

<ComboBox ItemsSource="{Binding ElementName=BVTWindow, Path=DataContext.AreaList}" SelectedItem="{Binding Path=Area}">
    <ComboBox.Style>
        <Style TargetType="{x:Type ComboBox}">
            <Style.Setters>
                <Setter Property="Visibility" Value="Collapsed" />
            </Style.Setters>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=BVTWindow, Path=DataContext.IdentitySelection}" Value="Test Management">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>

这很管用。不幸的是,应用样式设置器(出于某种原因)会从组合框中删除颜色主题。现在它是一个浅灰色的盒子,里面有白色的文字,几乎无法阅读。

我尝试将前景和背景属性添加到组合框标记中,但没有效果。

我还尝试将前景和背景的Setter属性添加到DataTrigger中,但也没有效果。

我需要停止从框中删除主题,手动设置文本颜色,或者手动设置背景颜色。

我读过一篇文章,说Windows8(我正在使用)会干扰ComboBox的样式,但没有一个容易理解的解决方案

任何建议都会帮我很多忙。提前谢谢。

WPF:Style.Ssetter更改组合框颜色,赢得';t换回

本文对此进行了很好的解释:

http://social.technet.microsoft.com/wiki/contents/articles/24240.changing-the-background-color-of-a-combobox-in-wpf-on-windows-8.aspx

基本上,Windows8对ComboBox有一个不同的设置,它打破了一些样式属性。您仍然可以对其进行样式设置,但您必须右键单击组合框并选择"编辑模板"。这将在您的项目视图中生成大量的xaml(每个可能的状态组合的配色方案),但您可能不需要所有这些。

我有一个新的解决方案,它比我以前的想法更干净、更快、更容易、更好看:

只需将组合框包装在WrapPanel或StackPanel中,然后将样式设置器应用于父对象。控件将保留其正确的样式,并且父面板无论如何都应该是透明的,所以样式在那里无关紧要。最糟糕的情况是,WrapPanel中只有一个项,xaml中还有两行额外的代码。这也适用于其他控件,因为我只需要使用复选框。

这里有一个例子:

<WrapPanel>
    <WrapPanel.Style>
        <Style TargetType="{x:Type WrapPanel}">
            <Setter Property="Visibility" Value="Collapsed"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding DataContext.TesterIdentitySelection.CanEdit, ElementName=BVTWindow}" Value="true">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </WrapPanel.Style>
    <ComboBox ItemsSource="{Binding Path=DataContext.AreaList, ElementName=BVTWindow}" DisplayMemberPath="Name" SelectedItem="{Binding Path=Area, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" ToolTip="Select the testing area."/>
</WrapPanel>

组合框在包装面板内,包装面板具有显示/隐藏行为。由于包装面板本身没有任何风格(只是一个看不见的支架),所以一切看起来都很棒。