C# 在wpf应用程序中更改组合框项目背景色
我有一个wpf应用程序,我需要在其中自定义一个组合框以使其可编辑C# 在wpf应用程序中更改组合框项目背景色,c#,.net,wpf,forms,mvvm,C#,.net,Wpf,Forms,Mvvm,我有一个wpf应用程序,我需要在其中自定义一个组合框以使其可编辑 public class AutoCompleteFacturation: ComboBox { List<vue_fsign_fiche_signaletique> liste = new List<vue_fsign_fiche_signaletique>(); // [...] ItemsSource = NewDataSource; liste = NewDataS
public class AutoCompleteFacturation: ComboBox
{
List<vue_fsign_fiche_signaletique> liste = new List<vue_fsign_fiche_signaletique>();
// [...]
ItemsSource = NewDataSource;
liste = NewDataSource.ToList<vue_fsign_fiche_signaletique>();
ComboBoxItem item = (ComboBoxItem)base.Items[0];
item.Background = System.Windows.Media.Brushes.AliceBlue;
}
公共类自动完成制作:组合框
{
List liste=新列表();
// [...]
ItemsSource=新数据源;
liste=NewDataSource.ToList();
ComboBoxItem=(ComboBoxItem)base.Items[0];
item.Background=System.Windows.Media.brusks.AliceBlue;
}
我需要更改第一个itemComboBoxItem item=(ComboBoxItem)base.Items[0]的背景代码>=>我收到一个异常,表明无法将vue\u fsign\u fiche\u signaletique
转换为ComboBoxItem
那么,我该如何解决这个问题,使组合框的第一项着色呢
谢谢您得到的项目是使用数据源
绑定的项目(这里的类型为vue\u fsign\fiche\u signaletique
)
您需要的是ComboBoxItem
,它是一个容器。要获取它,请使用ItemContainerGenerator.ContainerFromIndex(index)
或ItemContainerGenerator.ContainerFromItem(item)
:
您在列表中绑定了您的组合框
因此项
返回vue\u fsign\u fiche\u signaletique的列表
2种可能性:
foreach(列表中的vue_fsign_fiche_signaletique fiche)
{
ComboBoxItem i=新ComboBoxItem();
i、 Content=fiche.Text;
i、 后台=System.Windows.Media.brusks.AliceBlue;
基础.项目.添加(i);
}
或者将您的vue\u fsign\fiche\u signaletique
包装在视图模型中并使用IValueConverter+1,因为使用ItemContainerGenerator
是获取与绑定数据对象关联的UI对象的正确方法:),我认为在这种特殊情况下,触发器或转换器会更容易case@Arie我得到空值ComboBoxItem cbi=(ComboBoxItem)ItemContainerGenerator.ContainerFromIndex(0);ComboBoxItem=(ComboBoxItem)ItemContainerGenerator.ContainerFromItem(SelectedFiche)代码>@lamloumiaaf,如果您需要在生成容器后运行它。如果你想要的话,这里有一个快速的样品。。。基本上,您将事件附加到ItemContainerGenerator.StatusChanged
,当状态更改为ContainerGenerated
时,您将删除事件处理程序并对UI对象应用任何自定义设置。但是,在您的特定情况下,您可能希望研究使用转换器的后台绑定。我更喜欢itemsource
绑定,而不是循环遍历对象并手动为每个对象创建ComboBoxItem
。我建议实现触发器或后台绑定+转换器。