Wpf c#更改复选框comboboxitem颜色+禁用

本文关键字:颜色 禁用 comboboxitem 复选框 Wpf | 更新日期: 2023-09-27 18:15:23

我有一个列表,它以。distinct格式填充,然后我获得这些项并创建复选框来填充组合框。

在应用了一些滤镜之后,我必须在第二个列表中搜索这些组合框项,如果它不存在,我必须禁用该项并设置其背景色。

// List to populate the combobox
public List<System.Windows.Controls.CheckBox> ListaCmbMnMe { get; set; }
//...
ListaCmbMnMe = new List<System.Windows.Controls.CheckBox>();
// ListaPendencia is populated from database MnMe is a column from it
foreach (string item in ListaPendencia.Select(p => p.MnMe).Distinct())
{
    checkBox = new System.Windows.Controls.CheckBox();
    checkBox.Content = item;
    ListaCmbMnMe.Add(checkBox);
}
//...
// Just trying to change the properties to find out if it works
foreach (System.Windows.Controls.CheckBox item in ListaCmbMnMe)
{
    item.IsEnabled = false;
    item.Background = new SolidColorBrush(Color.FromRgb(102, 153, 255));
}
cmbMnMe.ItemsSource = ListaCmbMnMe;

我没有在xaml上做任何特别的操作。

既不改变颜色也不禁用

Wpf c#更改复选框comboboxitem颜色+禁用

而不是添加cmbMnMe.ItemsSource = ListaCmbMnMe;,这意味着数据源;即datacontext;加入Items。不需要另一个复选框列表集合。

// ListaPendencia is populated from database MnMe is a column from it
foreach (string item in ListaPendencia.Select(p => p.MnMe).Distinct())
{
    checkBox = new System.Windows.Controls.CheckBox();
    checkBox.Content = item;
    checkBox.IsEnabled = false;
    checkBox.Background = new SolidColorBrush(Color.FromRgb(102, 153, 255));
    cmbMnMe.Items.Add(checkBox);    
}

理想情况下,你应该使用数据绑定使用DataTemplate,有一个复选框和必要的绑定;使用MVVM模式

我只是忘了在xaml上绑定"IsEnabled"属性。