2010-08-04 4 views
1
<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> 

Comment obtenir la valeur de l'élément sélectionné à partir d'une liste déroulante multicolonne. Je veux obtenir la valeur dans le bloc de texte qui dit, "Toutes les valeurs". J'ai essayé d'utiliser le dessous du code, mais il donne StackPanel que la chaîne,Comment obtenir la valeur de l'élément sélectionné de ComboBox multicolonne dans WPF

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

Même la pensée J'ai donné une réponse possible, je me demande si ces valeurs sont codées en dur (comme vous le montrez dans votre exemple) ou si elles sont liées à une liste qui se lie à la liste déroulante. Si vous avez une liste, vous pouvez simplement obtenir le SelectedIndex et l'utiliser pour obtenir la valeur que vous recherchez puisque vous avez maintenant l'index. –

Répondre

1

lui donner un nom

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

puis

  m_txtAllValues.Text = "yay it does work"; 

mise à jour: désolé je suis arrivé u mal :)

Vous avez une propriété ASelect.SelectedIndex qui a indiqué laquelle est sélectionnée de sorte que vous pouvez faire une liste de vos Collection TextBlocks (Liste ou dictionnaire fe) et ajouter vos blocs de texte (nommés) pour en ordre, puis

 string txt = myCollectionOfTextBlocks[ASelect.SelectedIndex]; 
+0

Non, ma combobox a plusieurs éléments ComboBox. J'ai édité ma question pour montrer tous les articles que j'ai. Je veux seulement obtenir le texte du bloc de texte de l'élément sélectionné, comment puis-je le faire. Dois-je donner un nom aux blocs de texte dans tous les éléments ComboBox. Si oui, comment puis-je obtenir le texte de celui qui est sélectionné? – developer

+0

si c'est une collection statique vous pouvez leur donner des noms :) sinon xaml est xml donc des noeuds, des enfants et ainsi de suite –

+0

Oui, c'est une collection statique mais comment obtenir le texte de l'objet combobox qui a été sélectionné? – developer

1

Vous devez creuser plus profondément .... Go here... et utiliser la Méthode FindChild pour trouver le TextBlock dans votre ComboBoxItem. Cependant, vous devrez peut-être y apporter des modifications si vous ne nommez pas vos contrôles afin de pouvoir rechercher le Nième contrôle enfant de profondeur M ou autre ...

Une fois que vous avez l'enfant TextBlock vous il suffit d'utiliser le .Text pour l'obtenir.

+0

Ceci est trop confus. N'y a-t-il pas un moyen plus simple d'obtenir la valeur? – developer

1

Vous ajoutez un type complexe (StackPanel) en tant qu'éléments de votre liste déroulante. Lorsque vous accédez à la propriété SelectedItem de votre liste déroulante, vous récupérez l'instance de l'objet StackPanel.

C'est la mesure dans laquelle la liste déroulante connaît ses éléments. Il n'a aucune idée de ce qu'il y a dans le StackPanel. Comme Myermian a dit que vous auriez besoin d'explorer l'arbre visuel d'une certaine façon pour comprendre ce que vous voulez. La manière hacky est de prendre l'instance de StackPanel que vous obtenez et d'appeler StackPanel.Children pour obtenir ses enfants, puis de les parcourir et de trouver ce que vous voulez. Cependant, c'est une approche très fragile et généralement non recommandée.

Ce que vous voulez vraiment faire, c'est la liaison de données dans la zone de liste déroulante et la séparation de l'interface utilisateur des données de la liste. De cette façon, vous pouvez accéder aux données que vous voulez (la valeur de zone de texte) quelle que soit la structure de l'interface utilisateur de l'élément

1

s'il vous plaît suivre ce code

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

pour plus d'informations, visitez ce lien multi-column-combobox-in-c-wpf

Questions connexes