WPF: Désactiver la zone de liste, mais activer le défilement
Été cogner ma tête contre ce matin.
En gros, j'ai une zone de liste, et je veux garder les gens de la modification de la sélection au cours d'un long processus en cours d'exécution, mais leur permet de les faire défiler.
Solution:
Toutes les réponses sont bonnes, je suis allé à la déglutition des événements de souris puisque c'était le plus simple. J'ai câblé PreviewMouseDown et PreviewMouseUp à un seul événement, qui a vérifié mon backgroundWorker.IsBusy, et si il a été mis sur la IsHandled de propriété sur l'événement arguments pour vrai.
OriginalL'auteur Matt Briggs | 2009-02-09
Vous devez vous connecter pour publier un commentaire.
L'astuce est de ne pas vraiment la désactiver. La désactivation de verrouiller tous les messages à partir de la case de défilement.
Au cours de la longue gris le texte dans la zone de liste à l'aide de ses .Propriété ForeColor et d'avaler tous les clics de souris. Cela permettra de simuler la désactivation du contrôle et permettent de faire défiler la libre.
Donc avaler événements de pression de touche?
Oui ce n'est pas vraiment une bonne réponse, je ne ferais pas cela.
OriginalL'auteur Yes - that Jake.
Si vous regardez dans le modèle de contrôle de la zone de liste, il y a une barre de Défilement et ItemsPresenter à l'intérieur. Afin de Rendre le ItemsPresenter Désactivé et vous obtiendrez facilement. Utilisez le soufflet de Style sur la liste et vous êtes bon pour aller.
Sur la liste d'utiliser le Style
OriginalL'auteur Jobi Joy
désolé il a été près de deux ans, mais je pense que cette solution qui utilise DataTrigger est encore plus simple. Comment faire pour désactiver un databound ListBox élément basé sur la valeur d'une propriété?
OriginalL'auteur Shuo
J'ai trouvé que le fait de mettre un handicapé ListBox dans un ScrollViewer avec le défilement automatique est activé donne l'effet désiré.
OriginalL'auteur Konrad
Alors que c'est pour Silverlight, peut-être que ce blog serait de vous aider à aller dans la bonne direction? Silverlight Pas de Sélection de zone de liste et ViewBox
OriginalL'auteur Andy
J'ai utilisé cette solution, c'est vraiment facile et fonctionne parfaitement:
Pour chaque
SurfaceListBoxItem item
vous mettre dans laListbox
, faites ceci:OriginalL'auteur Oskar
Une autre option à considérer est la désactivation de la ListBoxItems. Cela peut être fait par le réglage de la ItemContainerStyle comme le montre l'extrait suivant.
Si vous ne voulez pas que le texte soit gris, vous pouvez spécifier les handicapés couleur en ajoutant une brosse pour le style de ressources avec la clé suivante: {x:Statique SystemColors.GrayTextBrushKey}. L'autre solution serait de remplacer la ListBoxItem modèle de contrôle.
Cette question est à peu près le même que celui ci: Il n'y a pas de zone de liste.SelectionMode=“None”, est-il une autre manière de désactiver la sélection dans une listbox? et ma réponse est la même.
OriginalL'auteur Caleb Vear
J'ai trouvé un très simple et direct de la solution de travail pour moi, j'espère que pour vous aussi bien
OriginalL'auteur Asad Durrani
Une réponse complète à l'aide de http://www.codeproject.com/Tips/60619/Scrollable-Disabled-ListBox-in-WPF
Le Style:
La classe
Alors au lieu de programmés IsEnabled sur la liste, utilisez IsEnabledWithScroll à la place. Le défilement ne fonctionne pas si la zone de liste est activé ou désactivé.
OriginalL'auteur Chris Klepeis
Il semble y avoir de nombreuses façons de la peau ce chat. J'ai trouvé que par la mise en
IsHitTestVisible
sur leItemsContainerStyle
en XAML j'ai exactement ce dont j'avais besoin:OriginalL'auteur BrianVPS