Zone de liste déroulante avec ItemTemplate qui comprend un bouton
Donc, disons que j'ai un ComboBox avec un modèle de données. L'un des éléments dans le modèle de données est un bouton:
<ComboBox Width="150" ItemsSource="{Binding MyItems}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Button Content="ClickMe" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Le problème, c'est que le bouton mange le clic, et l'élément ne doit pas être sélectionné, si le bouton est sélectionné. Cela signifie que les pull-down ne partent pas, et aucun élément n'est sélectionné.
Je comprends POURQUOI ce qui se passe.
Est-il un moyen de le contourner? Éventuellement un moyen de traiter le bouton de la souris (je suis de liaison à une commande) et dites-lui de continuer jusqu'à la chaîne de sorte que la zone de liste modifiable peut également traiter le clic?
Remarque: je vois mon problème en Silverlight, mais je suppose que l'exacte même comportement peut être vu avec WPF.
OriginalL'auteur Brian Genisio | 2009-05-19
Vous devez vous connecter pour publier un commentaire.
Votre meilleur pari serait probablement pour régler le SelectedItem dans le bouton de commande.
Il y a aussi un IsOpen (ou quelque chose de très similaire) à la propriété sur les zones de liste modifiables, vous pouvez le mettre à False. Vous pourriez également être en mesure de définir Focusable="False" sur les boutons et l'amènent à se produire automatiquement.
Ouais, il a fini par être une combinaison des deux. Voir ma réponse pour une solution complète, mais je veux vous donner le cred points, donc je suis le marquage de votre réponse comme correcte.
OriginalL'auteur Bryan Anderson
OK, je l'ai compris. C'est un total de hack, mais encore, elle me permet de lier ma commande pour le bouton et continuer à avoir la liste déroulante de comportement pour la sélection de l'élément:
Et dans le code behind:
Si je voulais vraiment, je pourrais lier la SelectedItem et IsDropDownOpen de propriétés dans mon ViewModel, mais j'ai décidé contre lui pour conserver ce comportement comme un hack extension de la XAML, dans un effort pour garder mon ViewModel propre.
OriginalL'auteur Brian Genisio
J'ai trouvé une autre possibilité pour le MVVM contexte. J'ai utilisé une classe dérivée de
ComboBox
et si un élément est adden qui dérive deButtonBase
à joindre à laClick
événement pour fermer laComboBox
.Cela fonctionne pour mon projet, mais seulement, parce que les éléments se sont des boutons, il ne serait pas de travail, si elles contiennent des boutons comme un élément enfant.
OriginalL'auteur MatthiasG
Je ne sais pas si il existe un moyen de faire ce que vous voulez. Si vous avez été de mettre un
Button
dans unListBox
, par exemple, le même problème se produit - cliquant sur leButton
ne cause pas de son élément dans laListBox
pour être sélectionné. En fait, c'est le cas pour n'importe quel contrôle dans uneItemsControl
qui prend en charge la sélection.Vous pourriez être en mesure de faire quelque chose avec les
Click
de l'événement et marquer comme ce n'est pas manipulé afin qu'il continue de l'arborescence visuelle, mais même alors, je ne suis pas sûr si cela fonctionnerait ou pas.OriginalL'auteur Andy