C # Wpf Установить стиль костюма в ComboBoxItem - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть ComboBox привязанный к списку.ComboBox имеет 3 ComboBoxItems из этого списка.Я также получил CheckBox.Если CheckBox не отмечен и выбран первый ComboBoxItem, свойство "Property1" в моей модели представления устанавливается в значение false.Теперь, если «Property1» имеет значение false, я бы хотел изменить фон и передний план этого ComboBoxItem.Как мне этого добиться?

Я пытался это сделать с помощью Style и MultiDataTrigger, но безуспешно - мне удалось изменить стиль только для всех ComboBoxItems, а не для конкретного.

<Style TargetType="ComboBoxItem">
            <Style.Triggers>
               <MultiDataTrigger>
                   <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding Path=SelectedComboBoxItem}" Value="Item1" />
                       <Condition Binding="{Binding Path=CheckStatus}" Value="False" />
                   </MultiDataTrigger.Conditions>
                   <Setter Property="Background" Value="GhostWhite" />
                   <Setter Property="Foreground" Value="Gainsboro" />
               </MultiDataTrigger>
            </Style.Triggers>
        </Style>

Как мне добиться изменения стиля определенного ComboBoxItem при его привязке через List?

Спасибо за ваши подсказки / помощь.

1 Ответ

0 голосов
/ 13 декабря 2018

Это, вероятно, не лучшее решение, но рабочее:

Вместо использования стиля я создал комбинированный список с ItemTemplate

        <ComboBox Width="200" Height="30"  ItemsSource="{Binding SimpleList, UpdateSourceTrigger=PropertyChanged}" >
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <Label Content="{Binding Name}" Background="{Binding BackGround}" Foreground="{Binding ForeGround}"/>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

Мой SimpleList содержит 3 "SimpleObjects"со свойствами для имени, фона и фона.BackGround по умолчанию имеет белый цвет, а ForeGround - черный.

После того, как мой CheckBox проверен, я получаю первый элемент моего списка и изменяю его свойства.

    private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
  SimpleObject obj = SimpleList.FirstOrDefault();
  obj.BackGround = new SolidColorBrush(Colors.Black);
  obj.ForeGround = new SolidColorBrush(Colors.White);
}

Выглядит так.Looking like This

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...