Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在wpf应用程序中更改组合框项目背景色_C#_.net_Wpf_Forms_Mvvm - Fatal编程技术网

C# 在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

我有一个wpf应用程序,我需要在其中自定义一个组合框以使其可编辑

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;
}
我需要更改第一个item
ComboBoxItem 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
。我建议实现触发器或后台绑定+转换器。