WPF列表框项目突出显示颜色

时间:2015-01-23 20:33:14

标签: wpf

我想根据属性值突出显示WPF列表框中的项目。我不想使用IsSelected = true选择项目,因为它将触发选择更改事件。设置此属性后,我希望该项目(视觉上)表现得好像我们正在鼠标悬停在该项目上。我尝试通过触发器设置背景颜色。但由于我们为我的应用程序支持不同的主题,因此我不想对背景颜色进行硬编码,因为它不会与所有主题同步。任何解决方案?

1 个答案:

答案 0 :(得分:0)

如果你想根据属性值来做,最简单的方法是子类列表框项:

class HighlightItem : ListBoxItem
{
public bool IsHighlighted
{
    get { return (bool)GetValue(IsHighlightedProperty); }
    set { SetValue(IsHighlightedProperty, value); }
}

// Using a DependencyProperty as the backing store for IsHighlighted.  This enables animation, styling, binding, etc...
public static readonly DependencyProperty IsHighlightedProperty =
    DependencyProperty.Register("IsHighlighted", typeof(bool), typeof(HighlightItem),
    new PropertyMetadata(false, (s, e) => 
    {
        HighlightItem item = (HighlightItem)s;
        item.Background = new SolidColorBrush(item.HighlightColor); 
    }));

public Color HighlightColor
{
    get { return (Color)GetValue(HighlightColorProperty); }
    set { SetValue(HighlightColorProperty, value); }
}

// Using a DependencyProperty as the backing store for HighlightColor.  This enables animation, styling, binding, etc...
public static readonly DependencyProperty HighlightColorProperty =
    DependencyProperty.Register("HighlightColor", typeof(Color), typeof(HighlightItem), new PropertyMetadata(Colors.Red)); 
}

然后,在xaml:

        <ListBox >
            <ListBox.Items>
                <local:HighlightItem>item1</local:HighlightItem>
                <local:HighlightItem HighlightColor="Blue" IsHighlighted="True">item2</local:HighlightItem>
                <local:HighlightItem>item3</local:HighlightItem>
            </ListBox.Items>
        </ListBox>