如何从WPF中的多列ComboBox获取所选项的值

时间:2010-08-04 20:22:56

标签: c# wpf-controls

    <ComboBox Name="ASelect" Width="180" Height="27" SelectedIndex="0" HorizontalContentAlignment="Center" VerticalAlignment="Center" SelectionChanged="ASelect_SelectionChanged">
                 <ComboBoxItem HorizontalContentAlignment="Right" VerticalContentAlignment="Center">
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                        <Image Source="a.png" Height="18" Width="22" />
                        <Label Content=" "/>
                    <TextBlock Width="150" Name="All"> All Values</TextBlock>
                </StackPanel>
                </ComboBoxItem>

                <ComboBoxItem HorizontalContentAlignment="Left">
                    <StackPanel Orientation="Horizontal">
                        <Image Source="tick.png" Height="24" Width="24" />
                        <TextBlock Width="150"> New Values</TextBlock>
                    </StackPanel>
                </ComboBoxItem>

                <ComboBoxItem HorizontalContentAlignment="Left">
                    <StackPanel Orientation="Horizontal">
                        <Image Source="question.png" Height="24" Width="24" />
                        <TextBlock Width="150"> Old Values</TextBlock>
                    </StackPanel>
                </ComboBoxItem>
</ComboBox>

如何从多列组合框中获取所选项目的值。我想在文本块中获取“所有值”的值。我尝试使用下面的代码,但它将stackpanel作为字符串,

string selectionString = ((ComboBoxItem)ASelect.SelectedItem).Content.ToString();

4 个答案:

答案 0 :(得分:1)

给它起个名字

        <TextBlock Name="m_txtAllValues" Width="150"> All Values</TextBlock>

然后

         m_txtAllValues.Text = "yay it does work";

更新:对不起我错了:)

您有一个属性ASelect.SelectedIndex,表示选择了哪一个 所以你可以创建一个列表TextBlocks的集合(列表或字典f.e)并按顺序添加你的文本块(命名),然后

     string txt = myCollectionOfTextBlocks[ASelect.SelectedIndex];

答案 1 :(得分:1)

您需要深入挖掘.... Go here...并使用FindChild方法在ComboBoxItem中查找TextBlock。但是,如果您没有为控件命名,那么您可能需要对其进行一些更改,以便您可以搜索M级深度或其他任何内容的第N个子控件...

一旦你有了孩子TextBlock,你只需使用.Text来获取它。

答案 2 :(得分:1)

您正在添加复杂类型(StackPanel)作为组合框的项目。当您访问组合框的SelectedItem属性时,您将返回StackPanel对象的实例。

这就是组合框知道它的物品的程度。它不知道StackPanel里面是什么。

就像Myermian所说,你需要以某种方式抓取视觉树来弄清楚你想要什么。

hacky方法是取回你返回的StackPanel实例并调用StackPanel.Children来获取它的孩子然后迭代它们并找到你想要的东西。但是,这是一种非常脆弱且通常不推荐的方法。

您真正想要做的是对组合框进行数据绑定,并将UI与列表中的数据分开。这样,无论项目的UI结构如何,您都可以访问所需的数据(文本框值)

答案 3 :(得分:1)

请遵循此代码

string typeID="WHT01";
for (int i = 0; i < cmbWHTypeId.Items.Count; i++)
{
   EWareHouseTypes aWHType = (EWareHouseTypes)cmbWHTypeId.Items[i];
   if (aWHType.WhtID == typeID)
   {
      cmbWHTypeId.SelectedIndex = i;
      break;
   }
}

有关详细信息,请访问此链接multi-column-combobox-in-c-wpf