簡體   English   中英

如何從WPF中的多列ComboBox獲取所選項的值

[英]How to get value of selected item from multicolumn ComboBox in WPF

    <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();

給它起個名字

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

接着

         m_txtAllValues.Text = "yay it does work";

更新:抱歉,我搞錯了:)

你有一個屬性ASelect.SelectedIndex,它指出了哪一個被選中,所以你可以創建一個列表收集你的TextBlocks(列表或詞典fe)並按順序添加你的文本塊(命名)然后

     string txt = myCollectionOfTextBlocks[ASelect.SelectedIndex];

您需要深入挖掘.... 轉到此處...並使用FindChild方法在ComboBoxItem中查找TextBlock。 但是,如果您沒有為控件命名,那么您可能需要對其進行一些更改,以便您可以搜索M級深度或其他任何內容的第N個子控件...

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

您正在添加復雜類型(StackPanel)作為組合框的項目。 當您訪問組合框的SelectedItem屬性時,您將返回StackPanel對象的實例。

這就是組合框知道它的項目的程度。 它不知道StackPanel里面是什么。

就像Myermian所說,你需要以某種方式抓取視覺樹來弄清楚你想要什么。

hacky方法是取回你返回的StackPanel實例並調用StackPanel.Children來獲取它的孩子然后迭代它們並找到你想要的東西。 但是,這是一種非常脆弱且通常不推薦的方法。

你真正想要做的是數據綁定組合框並將UI與列表中的數據分開。 這樣,無論項目的UI結構如何,您都可以訪問所需的數據(文本框值)

請遵循此代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM