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