Я хочу выделить элемент в списке списка WPF на основе значения свойства. Я не хочу выбирать элемент, используя IsSelected = true, потому что он будет запускать событие с измененным выбором. Когда это свойство установлено, я хочу, чтобы этот элемент вел себя (визуально), как если бы мы наводили курсор мыши на этот элемент. Я попытался установить цвет фона через триггер. Но поскольку мы поддерживаем разные темы для моего приложения, я не хочу жестко кодировать задний цвет, поскольку он не синхронизируется со всеми темами. Любые решения?WPF List Box Item Highlight color
-1
A
ответ
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>
Спасибо за ответ. Он по-прежнему требует, чтобы цвет был указан правильно? Например, вы дали HighlightColor = синий. Я пытаюсь сделать это, когда мы устанавливаем IsHighlighted = «True». Я хочу, чтобы фон элемента отражал фон выбранного элемента в соответствии с текущей темой, не запуская событие изменения выбора. – DotNetLearner
Если тема не делает что-то странное, вы должны просто использовать SystemColors.HighlightBrush вместо синего – mnistic