Как получить значение выбранного элемента из многоколоночного ComboBox в WPF - PullRequest
1 голос
/ 05 августа 2010
    <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>

Как получить значение выбранного элемента из многоколоночного списка. Я хочу получить значение в текстовом блоке с надписью «Все значения». Я попытался использовать приведенный ниже код, но он дает в качестве строки стековую панель,

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

Ответы [ 4 ]

1 голос
/ 03 марта 2011

пожалуйста, следуйте этому коду

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

для получения дополнительной информации перейдите по этой ссылке комбинированный список-столбец в c-wpf

1 голос
/ 05 августа 2010

Вам нужно копать глубже .... Зайдите сюда ... и используйте метод FindChild, чтобы найти TextBlock внутри вашего ComboBoxItem.Тем не менее, вам, возможно, придется внести в него некоторые изменения, если вы не назовете свои элементы управления, чтобы вы могли искать N-й дочерний элемент управления, который имеет глубину M или любое другое ...

Как только у вас появится ребенокTextBlock вы просто используете .Text, чтобы получить его.

1 голос
/ 05 августа 2010

Вы добавляете сложный тип (StackPanel) в качестве элементов вашего комбинированного списка.Когда вы получаете доступ к свойству SelectedItem вашего комбинированного списка, вы возвращаете экземпляр объекта StackPanel.

Это то, что этот комбинированный список знает о своих элементах.Он понятия не имеет, что находится внутри StackPanel.

Как сказал Myermian, вам нужно каким-то образом сканировать визуальное дерево, чтобы выяснить, что вы хотите.

Хакерский способ - взять экземпляр StackPanel, который вы получили, и вызвать StackPanel.Childrenчтобы получить это дети, затем итерации и найти то, что вы хотите.Однако это очень хрупкий и, как правило, не рекомендуемый подход.

Что вы действительно хотите сделать, так это привязать данные к комбинированному списку и отделить пользовательский интерфейс от данных в списке.Таким образом, вы можете получить доступ к нужным данным (значение текстового поля) независимо от структуры пользовательского интерфейса элемента

1 голос
/ 05 августа 2010

дайте ему имя

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

и затем

         m_txtAllValues.Text = "yay it does work";

обновление: извините, я ошибся:)

У вас есть свойство ASelect.SelectedIndexуказал, какой из них выбран, чтобы вы могли составить список Collection ваших TextBlocks (List или Dictionary fe) и добавить к нему текстовые блоки (именованные) по порядку, а затем

     string txt = myCollectionOfTextBlocks[ASelect.SelectedIndex];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...