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>