C#Wpf将Costum Style设置为ComboBoxItem

时间:2018-12-12 10:59:31

标签: c# wpf xaml mvvm

我有一个绑定到列表的ComboBoxComboBox包含该列表中的3个ComboBoxItem。我也有一个CheckBox。如果未选中CheckBox,并且选择了第一个ComboBoxItem,则我的视图模型中的属性“ Property1”将设置为false。现在,如果“ Property1”为false,我想更改此ComboBoxItem的背景和前景。我该如何实现?

我试图用Style和MultiDataTrigger完成该操作,但没有成功-我只设法更改了所有ComboBoxItem的样式,而不是特定的样式。

<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的样式?

感谢您的提示/帮助。

1 个答案:

答案 0 :(得分:0)

这可能不是最佳解决方案,而是可行的解决方案:

我没有使用样式,而是创建了一个带有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”,它们具有Name,BackGround和ForeGround的属性。默认情况下,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