如何通过Tag获取ComboboxItem索引?

时间:2016-05-05 15:30:33

标签: c# wpf

我有以下Combobox

<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>

现在你怎么看到我有三个具有特定Tag属性的ComboBoxItems。这里的tag属性是颜色的值。

我需要知道的是:如何通过Tag属性获取特定ComboBoxItem的索引?

我会尝试更清楚地解释它:假设我有一个名为color的字符串作为值#FDB75B,现在我需要找到具有相同Tag的ComboBox项目并且特别考虑这个ComboBoxItem的位置。

string color = "#FDB75B";
//In this way I get the Tag property of the selected item
((ComboBoxItem)Colors.SelectedItem).Tag.ToString(); 

现在我需要做相反的情况,找到标记为ComboBoxItem的{​​{1}}索引,并自动选择它,如下:

#FDB75B

这可能吗?

3 个答案:

答案 0 :(得分:3)

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

PID  Val1  Val1Total 
---------------------
1    10    20  'See how both (1) columns have the same total      
2    10    10       
1    10    20  'See how both (1) columns have the same total
4    10    10      
3    10    10      

答案 1 :(得分:1)

您可以遍历该集合并选择如下:

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

答案 2 :(得分:1)

如果您只是想以编程方式选择项目,可以设置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>

对于ButtonSet,它只是:Colors.SelectedValue = "#FDB75B";

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