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

本文关键字:组合 显示 何使用 WPF | 更新日期: 2023-09-27 17:53:38

我有一个充满对象列表的组合框。我喜欢根据对象的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>

提前致谢

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

使用一个简单的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 changed,以确保改变值会通知UI触发器应该刷新。

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

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

应该对你有用。

(如果更一般,直接放在UserControl.Resources/Window.Resources中)