2012-06-22 4 views
7

У меня возникла проблема с установкой HighlightBrushKeySelectedItemListbox в 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> 
    

Заранее спасибо! :)

+2

Хороший первый вопрос Энди, хорошо построенный с точными примерами именно того, что вы пытались выделить! +1 – ThePower

+0

@ Andy Что такое currentField1 в вашем конверторе? Как вы получаете это в конвертере? Можете ли вы попробовать привязать к 'currentField' (т. Е. YourViewModelProperty) в невидимом стиле. – akjoshi

+0

currentField - это объект. Имя класса - это поле и имеет логическое свойство с именем «Сохранить». Как я могу привязать его к XAML? – Andy

ответ

1
<Style x:Key="listBoxStyle" TargetType="{x:Type ListBox}"> 
    <Style.Resources> 
     <!-- Background of selected item when focussed --> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" /> 
     <!-- Background of selected item when not focussed --> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Green" /> 
    </Style.Resources> 
</Style> 

<ListBox Style="{StaticResource listBoxStyle}"> 
</ListBox> 
+0

за ваш ответ, но это не решает мою проблему. Я знаю эти строки, но у меня есть существующая зависимость между цветом (ваш пример: color = "Red") и логическое значение currentField.Save, объект во время выполнения. Если он ложный, то цвет должен быть желтым, и если это правда, цвет должен быть зеленым. – Andy

Смежные вопросы