C# 如何通过标记获取ComboboxItem索引?

C# 如何通过标记获取ComboboxItem索引?,c#,wpf,C#,Wpf,我有以下组合框: <ComboBox x:Name="Colors" FontSize="20"> <ComboBoxItem Background="#46d6db" Tag="#46d6db">Blue</ComboBoxItem> <ComboBoxItem Background="#FDB75B" Tag="#FDB75B">Orange</ComboBoxItem> <Co

我有以下
组合框

<ComboBox x:Name="Colors" FontSize="20">
        <ComboBoxItem Background="#46d6db" Tag="#46d6db">Blue</ComboBoxItem>
        <ComboBoxItem Background="#FDB75B" Tag="#FDB75B">Orange</ComboBoxItem>
        <ComboBoxItem Background="#51B749" Tag="#51B749">Green</ComboBoxItem>
</ComboBox>
现在,我需要执行相反的操作,找到带有标签
#FDB75B
ComboBoxItem
索引,并自动选择它,如下所示:

Colors.SelectedIndex = "element found";

这是可能的吗?

您可以在集合中进行迭代,然后像这样选择:

string tagColor = "#51B749";
int foundIndex = -1;
foreach (ComboBoxItem item in Colors.Items)
{
    if (item.Tag.ToString() == tagColor)
    {
        foundIndex = item.TabIndex;
    }
}

使用linq查询并查找。下面是一个示例代码

var selectedItem = Colors.Items
  .Cast<ComboBoxItem>()
  .Where(e => e.Tag.ToString() == "#FDB75B")
  .FirstOrDefault();

Colors.SelectedItem = selectedItem;
var selectedItem=Colors.Items
.Cast()
.Where(e=>e.Tag.ToString()==“#FDB75B”)
.FirstOrDefault();
Colors.SelectedItem=SelectedItem;

如果您只是想通过编程方式选择项目,您可以设置
SelectedValuePath
并以这种方式使用它。这是我的测试XAML:

<Grid>
  <Grid.RowDefinitions>
     <RowDefinition Height="Auto" />
     <RowDefinition Height="*" />
     <RowDefinition Height="Auto" />
  </Grid.RowDefinitions>
  <ComboBox x:Name="Colors" FontSize="20" Grid.Row="0" SelectedValuePath="Tag">
     <ComboBoxItem Background="#46d6db" Tag="#46d6db">Blue</ComboBoxItem>
     <ComboBoxItem Background="#FDB75B" Tag="#FDB75B">Orange</ComboBoxItem>
     <ComboBoxItem Background="#51B749" Tag="#51B749">Green</ComboBoxItem>
  </ComboBox>
  <StackPanel Orientation="Horizontal" Grid.Row="2">
     <Button x:Name="ButtonSet" Click="ButtonSet_Click" Content="Set Selection" />
     <Button x:Name="ButtonDisplay" Click="ButtonDisplay_Click" Content="Display" />
  </StackPanel>
</Grid>

蓝色
橙色
绿色
对于
按钮集
,它只是:
Colors.SelectedValue=“#FDB75B”


对于
ButtonDisplay
,它是:
MessageBox.Show(“Selected:+Colors.SelectedValue”)

哇,我喜欢单线解决方案,谢谢,似乎效果很好:)使用for-loop-loop遍历每个组合框项目,获取标签并对照您要查找的内容进行检查。如果不在标记属性(对象)中添加对组合框索引的引用,则没有本机方法可以说此标记属于此组合框。你可以使用一个包含两个字段的结构,颜色和索引,并在tag属性中使用它们。Chris给出的答案说明了你应该如何做。除了代码更少之外,它还可以与其他项目类型一起使用,而不仅仅是ComboBoxItem。
<Grid>
  <Grid.RowDefinitions>
     <RowDefinition Height="Auto" />
     <RowDefinition Height="*" />
     <RowDefinition Height="Auto" />
  </Grid.RowDefinitions>
  <ComboBox x:Name="Colors" FontSize="20" Grid.Row="0" SelectedValuePath="Tag">
     <ComboBoxItem Background="#46d6db" Tag="#46d6db">Blue</ComboBoxItem>
     <ComboBoxItem Background="#FDB75B" Tag="#FDB75B">Orange</ComboBoxItem>
     <ComboBoxItem Background="#51B749" Tag="#51B749">Green</ComboBoxItem>
  </ComboBox>
  <StackPanel Orientation="Horizontal" Grid.Row="2">
     <Button x:Name="ButtonSet" Click="ButtonSet_Click" Content="Set Selection" />
     <Button x:Name="ButtonDisplay" Click="ButtonDisplay_Click" Content="Display" />
  </StackPanel>
</Grid>