Comment puis-je désactiver la sélection dans une ListBox?
Non, cela modifiera seulement l'effet visuel, pas le comportement de sélection réel
Comment puis-je désactiver la sélection dans une ListBox?
ItemsControl
Sauf si vous avez besoin d'autres aspects du ListBox
, vous pourriez utiliser ItemsControl
à la place. Il place les éléments dans le ItemsPanel
et n'a pas le concept de sélection.
Par défaut, ItemsControl
ne prend pas en charge la virtualisation de ses éléments enfants. Si vous avez beaucoup d'éléments, la virtualisation peut réduire l'utilisation de la mémoire et améliorer les performances, auquel cas vous pourriez utiliser l'approche 2 et styliser le ListBox
, ou ajouter la virtualisation à votre ItemsControl
.
ListBox
Alternativement, stylisez simplement le ListBox de telle sorte que la sélection ne soit pas visible.
<Style.Resources>
<!-- Élément sélectionné avec le focus -->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
Color="Transparent" />
<!-- Élément sélectionné sans le focus -->
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}"
Color="Transparent" />
<!-- Texte de l'élément sélectionné en avant-plan -->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}"
Color="Black" />
</Style.Resources>
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
Je pense qu'il l'a plutôt bien expliqué ici : asaddurrani.wordpress.com/tag/wpf-listbox-disable-selection
C'est parfait. cela empêche l'élément sélectionné et les autres contrôles tels que les boutons continuent de fonctionner. exactement ce que je cherchais
+1 pour cette approche. Si nous avons une page immense sur laquelle nous devons faire défiler, si l'utilisateur survole une ListBox, cela désactive efficacement la Molette de la souris car la listbox prend en charge les événements de la Molette de la souris. Cela signifie que l'utilisateur est frustré que la molette de la souris utilisée pour faire défiler toute la page cesse de fonctionner de manière aléatoire, en fonction du fait que la souris se trouve au-dessus d'une listbox ou non.
Charmant. Je ne savais jamais que vous pouviez directement déclarer ItemsControl, je pensais que c'est virtuel (MustOverride), merci !!!
Une autre option intéressante à considérer est de désactiver les ListBoxItems. Cela peut être fait en définissant le style ItemContainerStyle comme indiqué dans l'extrait suivant.
<Setter Property="IsEnabled" Value="False" />
Si vous ne voulez pas que le texte soit gris, vous pouvez spécifier la couleur désactivée en ajoutant un pinceau aux ressources du style avec la clé suivante : {x:Static SystemColors.GrayTextBrushKey}. L'autre solution serait de remplacer le modèle de contrôle ListBoxItem.
@Shimmy: Il est courant que les réponses triviales se ressemblent. Il n'y a pas de duplication ici digne d'un drapeau. Si vous avez d'autres questions à ce sujet, veuillez les poser sur Meta Stack Overflow.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Pouvez-vous fournir un exemple où il est valide d'avoir une ListBox à partir de laquelle vous ne pouvez pas sélectionner ? Puisque le comportement principal est de sélectionner des éléments. Je choisirais probablement un autre moyen de l'afficher. (Ce n'est pas moi qui essaie d'être critique mais plutôt un intérêt sincère pour l'endroit où cela pourrait se produire)
3 votes
@Martin : Par exemple, si vous vouliez faire glisser du contenu à partir d'un élément de liste - dans ce cas, vous n'êtes probablement pas intéressé par la sélection de cet élément. DE PLUS, lorsque vous faites glisser un élément : l'élément sélectionné de la liste change pendant que vous faites glisser dans la liste - voir ce post stackoverflow.com/questions/7589142/…
1 votes
Je crois que la raison pour laquelle Shimmy veut utiliser ListBox est que l'interlocuteur peut rendre la liste sélectionnable parfois. La question est aussi précieuse pour moi. Imaginez que vous construisez un jeu de cartes. Vous pouvez sélectionner une carte parmi vos cartes, parfois, vous pouvez en sélectionner plusieurs et à d'autres moments, vous ne pouvez en sélectionner aucune.
1 votes
De plus, parfois vous avez 10 cartes et seulement 4 d'entre elles sont sélectionnables. Parmi les 4, vous pouvez en sélectionner jusqu'à 3.
1 votes
@Marthin: Lorsque vous avez un GridView dans une ListBox. Les en-têtes du GridView fournissent beaucoup de fonctionnalités qui ne sont pas disponibles ailleurs. Et vous avez des contrôles d'édition dans les cellules du GridView.