如何使用WPF突出显示组合框中的项目?

时间:2011-04-29 14:04:13

标签: c# wpf

我有一个填充了对象列表的组合框。我喜欢基于对象的IsHighlighted属性突出显示组合框中的项目。

我尝试过写自己的风格但没有取得真正的成功......

<Style x:Key="SimpleComboBoxItem" TargetType="ComboBoxItem">
        <Setter Property="FocusVisualStyle" Value="{x:Null}" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ComboBoxItem">
                    <Border Name="Border" Padding="2" SnapsToDevicePixels="true">
                        <ContentPresenter x:Name="contentPresenter" />
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="true">
                            <Setter TargetName="Border" Property="Background" Value="#FFCCCCCC"/>
                        </Trigger>
                        <Trigger Property="Tag" Value="Highlight" SourceName="contentPresenter">
                            <Setter Property="Background" TargetName="Border" Value="#FFAAF3A0"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

提前完成

2 个答案:

答案 0 :(得分:3)

使用简单的DataTrigger可以正常工作。

您的对象类:

public class TestObject
{
    public string Name { get; set; }

    public bool IsHighlighted { get; set; }

    public override string ToString()
    {
        return this.Name;
    }
}

的Xaml:

<Window x:Class="TestWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:TestWPF"
        Title="MainWindow">
    <Grid>
        <StackPanel>
            <ComboBox>
            <ComboBox.Resources>
                <Style TargetType="ComboBoxItem">
                    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
                    <Setter Property="Background" Value="Gray" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsHighlighted}" Value="True">
                            <Setter Property="Background" Value="Red" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ComboBox.Resources>
                <local:Employee Name="Nick" />
                <local:Employee Name="Bob" IsHighlighted="True" />
                <local:Employee Name="Fred" />
            </ComboBox>
        </StackPanel>
    </Grid>
</Window>

注意:与上面的示例不同,我猜你的代码中你绑定了组合框的ItemsSource ......这应该是一样的。但要注意的一件事是,如果您的对象的'IsHighlighted'属性可以更改,您应该实现更改INotifyProperty以确保更改该值将通知UI触发器应该刷新。

答案 1 :(得分:0)

您可能想要重新定义HighlightBrushKey,覆盖默认突出显示样式:

<ComboBox.Resources>

    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="FFAAF3A0" />

</ComboBox.Resources>

应该为你做的伎俩。

(如果更一般,请直接将其放在UserControl.Resources / Window.Resources