У меня возникла проблема с установкой HighlightBrushKey
SelectedItem
Listbox
в WPF. Мое намерение состояло в том, чтобы установить цвет элемента в зависимости от заданного булева значения, лежащего в коде.WPF Изменение ListboxItem выделяет цвет, если выбрано
Я пробовал следующие шаги:
Реализацию конвертер проверяя логический и возвращающий правильный цвет.
Пример:
<ribbon:RibbonWindow.Resources> <l:WindowControl x:Key="ListBoxItemBackgroundConverter" /> <Style x:Key="listBoxStyle" TargetType="{x:Type ListBoxItem}"> <Style.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{Binding Source={x:Static SystemColors.HighlightBrushKey}, Converter={StaticResource ListBoxItemBackgroundConverter}}"/> <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{Binding Source={x:Static SystemColors.ControlBrushKey}, Converter={StaticResource ListBoxItemBackgroundConverter}}"/> </Style.Resources> </Style> </ribbon:RibbonWindow.Resources>
Проблема здесь в том, что метод Convert был вызван только один раз, но мне нужен конвертер будет вызываться каждый раз, когда я выберите элемент и проверки Boolean. Как триггер, но с «
HighlightBrushKey
».Преобразователь:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if(currentField == null) return Brushes.Yellow; if (currentField.Save) return Brushes.LightGreen; else return Brushes.Yellow; }
Моя следующая идея была установка "
HighlightBrushKey
" в "Transparent
" и измененияitem.Background
вручную в коде. Проблема здесь в том, что мои вещи стали белыми, а цвет фона не был виденПример:
<ListBox.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" /> <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> </ListBox.Resources>
Заранее спасибо! :)
Хороший первый вопрос Энди, хорошо построенный с точными примерами именно того, что вы пытались выделить! +1 – ThePower
@ Andy Что такое currentField1 в вашем конверторе? Как вы получаете это в конвертере? Можете ли вы попробовать привязать к 'currentField' (т. Е. YourViewModelProperty) в невидимом стиле. – akjoshi
currentField - это объект. Имя класса - это поле и имеет логическое свойство с именем «Сохранить». Как я могу привязать его к XAML? – Andy