C# 使用字符串选择ComboBoxItem

C# 使用字符串选择ComboBoxItem,c#,wpf,visual-studio,combobox,C#,Wpf,Visual Studio,Combobox,我有一个组合框,它使用带有背景色的ComboBoxItems,而不是 如何设置组合框,使用字符串“黄色”选择编辑项 组合框不会更改。使用以下选项作为起点: private void SetSelectedComboBoxItem(string itemName) { ComboItem selected = MyComboItems.FirstOrDefault(i => i.Name.Equals(itemName)); if (selected != null) {

我有一个组合框,它使用带有背景色的
ComboBoxItems
,而不是


如何设置组合框,使用字符串“黄色”选择编辑项

组合框不会更改。

使用以下选项作为起点:

private void SetSelectedComboBoxItem(string itemName)
{
   ComboItem selected = MyComboItems.FirstOrDefault(i => i.Name.Equals(itemName));
  if (selected != null)
  {
    combo.SelectedItem = selected;
  }
  else
  {
    combo.SelectedItem = combo.Items[0];
  }
}

然后修改ComboItem类以包含用于着色的属性:

public class ComboItem
{
  public string Color { get; private set; }

  public SolidColorBrush BackgroundColor { get; private set; }

  public SolidColorBrush ForegroundColor { get; private set; }

  public ComboItem(string color,  SolidColorBrush background, SolidColorBrush foreground)
  {
    Color = color;
    BackgroundColor = background;
    ForegroundColor = foreground;
  }
}
并更改列表初始化以包括新属性:

List<ComboItem> _myComboItems= new List<ComboItem>()
  {
    new ComboItem("White", Brushes.White, Brushes.Black),
    new ComboItem("Gray", Brushes.Gray, Brushes.White),
    new ComboItem("Dark Gray", Brushes.DarkGray, Brushes.White),
    new ComboItem("Black", Brushes.Black, Brushes.White),
    new ComboItem("Yellow", Brushes.Yellow, Brushes.Black),
    new ComboItem("Blue", Brushes.Blue, Brushes.Black),
    new ComboItem("Pink", Brushes.Pink, Brushes.Black)
  };
List\u myComboItems=newlist()
{
新组合项(“白色”,画笔。白色,画笔。黑色),
新组合项(“灰色”,画笔。灰色,画笔。白色),
新组合项(“深灰色”,画笔.DarkGray,画笔.White),
新组合项(“黑色”,画笔。黑色,画笔。白色),
新组合项(“黄色”,画笔。黄色,画笔。黑色),
新组合项(“蓝色”,画笔。蓝色,画笔。黑色),
新组合项(“粉色”,画笔。粉色,画笔。黑色)
};
并修改您的xaml,将样式应用于ComboBox,如下所示(这将应用于应用程序中的所有ComboBox控件):


希望我没有错过任何东西。

使用以下作为起点:

private void SetSelectedComboBoxItem(string itemName)
{
   ComboItem selected = MyComboItems.FirstOrDefault(i => i.Name.Equals(itemName));
  if (selected != null)
  {
    combo.SelectedItem = selected;
  }
  else
  {
    combo.SelectedItem = combo.Items[0];
  }
}

然后修改ComboItem类以包含用于着色的属性:

public class ComboItem
{
  public string Color { get; private set; }

  public SolidColorBrush BackgroundColor { get; private set; }

  public SolidColorBrush ForegroundColor { get; private set; }

  public ComboItem(string color,  SolidColorBrush background, SolidColorBrush foreground)
  {
    Color = color;
    BackgroundColor = background;
    ForegroundColor = foreground;
  }
}
并更改列表初始化以包括新属性:

List<ComboItem> _myComboItems= new List<ComboItem>()
  {
    new ComboItem("White", Brushes.White, Brushes.Black),
    new ComboItem("Gray", Brushes.Gray, Brushes.White),
    new ComboItem("Dark Gray", Brushes.DarkGray, Brushes.White),
    new ComboItem("Black", Brushes.Black, Brushes.White),
    new ComboItem("Yellow", Brushes.Yellow, Brushes.Black),
    new ComboItem("Blue", Brushes.Blue, Brushes.Black),
    new ComboItem("Pink", Brushes.Pink, Brushes.Black)
  };
List\u myComboItems=newlist()
{
新组合项(“白色”,画笔。白色,画笔。黑色),
新组合项(“灰色”,画笔。灰色,画笔。白色),
新组合项(“深灰色”,画笔.DarkGray,画笔.White),
新组合项(“黑色”,画笔。黑色,画笔。白色),
新组合项(“黄色”,画笔。黄色,画笔。黑色),
新组合项(“蓝色”,画笔。蓝色,画笔。黑色),
新组合项(“粉色”,画笔。粉色,画笔。黑色)
};
并修改您的xaml,将样式应用于ComboBox,如下所示(这将应用于应用程序中的所有ComboBox控件):



希望我没有遗漏任何内容。

您应该将
SelectedItem
设置为
ComboBoxItem
,而不是
字符串。您可以使用一些LINQ选择适当的ComboBoxItem:

cboColors.SelectedItem = cboColors.Items.OfType<ComboBoxItem>().FirstOrDefault(x => x.Content.ToString() == "Yellow");
cboColors.SelectedItem=cboColors.Items.OfType().FirstOrDefault(x=>x.Content.ToString()=“黄色”);

所选项目的类型和组合框中的项目必须匹配。

您应该将
SelectedItem
设置为
ComboBoxItem
而不是
字符串。您可以使用一些LINQ选择适当的ComboBoxItem:

cboColors.SelectedItem = cboColors.Items.OfType<ComboBoxItem>().FirstOrDefault(x => x.Content.ToString() == "Yellow");
cboColors.SelectedItem=cboColors.Items.OfType().FirstOrDefault(x=>x.Content.ToString()=“黄色”);

所选项目的类型和组合框中的项目必须匹配。

您需要使用字符串来标识ItemSource(组合框项目)中的哪个对象将成为所选项目。i、 e.cboColors.SelectedItem=cboColors.Items.FirstOrDefault(item=>item.Content.Equals(“黄色”)@CodexNZ它给出了一个错误,“ItemCollection不包含“FirstOrDefault”的定义。为什么要返回硬编码的xaml对象而不是类来表示组合中的项?这里提供的答案是:将允许您使用绑定集合作为查找的源,而无需执行您正在尝试的操作。您只需向ComboItem类中添加后台和前台绑定的属性。您需要使用字符串来标识ItemSource(ComboBox项)中的哪个对象将成为所选项。i、 e.cboColors.SelectedItem=cboColors.Items.FirstOrDefault(item=>item.Content.Equals(“黄色”)@CodexNZ它给出了一个错误,“ItemCollection不包含“FirstOrDefault”的定义。为什么要返回硬编码的xaml对象而不是类来表示组合中的项?这里提供的答案是:将允许您使用绑定集合作为查找的源,而无需执行您正在尝试的操作。您所需要做的就是为ComboItem类添加背景和前景绑定的属性。应用颜色是可行的。我遇到了两个问题。单击某个项目不会选中它,该框将保持为空。使用
setSelectedComboxItem(“黄色”)
我得到一个NullReferenceException。下面是我的完整示例代码:XAML。C#。在xaml中,您同时使用SelectedItem和SelectedIndex,请仅使用其中一个,因为它们会相互影响,即使在选择项目时,SelectedIndex值也会硬编码为0。NullReferenceException发生在何处?使用您的调试器找出空值,并对其进行修复或保护。应用颜色可以正常工作。我遇到了两个问题。单击某个项目不会选中它,该框将保持为空。使用
setSelectedComboxItem(“黄色”)
我得到一个NullReferenceException。下面是我的完整示例代码:XAML。C#。在xaml中,您同时使用SelectedItem和SelectedIndex,请仅使用其中一个,因为它们会相互影响,即使在选择项目时,SelectedIndex值也会硬编码为0。NullReferenceException发生在何处?使用调试器找出空值,并对其进行修复或保护。
cboColors.SelectedItem = cboColors.Items.OfType<ComboBoxItem>().FirstOrDefault(x => x.Content.ToString() == "Yellow");