2015-01-23 4 views
-1

Я хочу выделить элемент в списке списка WPF на основе значения свойства. Я не хочу выбирать элемент, используя IsSelected = true, потому что он будет запускать событие с измененным выбором. Когда это свойство установлено, я хочу, чтобы этот элемент вел себя (визуально), как если бы мы наводили курсор мыши на этот элемент. Я попытался установить цвет фона через триггер. Но поскольку мы поддерживаем разные темы для моего приложения, я не хочу жестко кодировать задний цвет, поскольку он не синхронизируется со всеми темами. Любые решения?WPF List Box Item Highlight color

ответ

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> 
+0

Спасибо за ответ. Он по-прежнему требует, чтобы цвет был указан правильно? Например, вы дали HighlightColor = синий. Я пытаюсь сделать это, когда мы устанавливаем IsHighlighted = «True». Я хочу, чтобы фон элемента отражал фон выбранного элемента в соответствии с текущей темой, не запуская событие изменения выбора. – DotNetLearner

+0

Если тема не делает что-то странное, вы должны просто использовать SystemColors.HighlightBrush вместо синего – mnistic