Comment puis-je empêcher WPF boutons de rester en surbrillance après avoir cliqué?
Lorsqu'une norme de WPF bouton est cliqué, il obtient en surbrillance en bleu (probablement à l'aide de la couleur bleue à partir de n'importe quel thème Windows est installé), et il reste en surbrillance jusqu'à ce que vous interagir avec n'importe quel autre contrôle. Pour mon application, il est source de confusion pour l'utilisateur.
Est-il un moyen simple de désactiver cette option et que le bouton de retour à son style normal?
Je suis à l'aide .NET 4.
- BTW, le problème est grave sur un écran tactile pour un bouton qui "bascule". Envisager un bouton est activé, donc, est la couleur de surbrillance. L'utilisateur maintenant la touche pour l'éteindre: il n'est plus mis en évidence, MAIS il a le focus, il a toujours l'air d'utilisateur comme c'est que la couleur de surbrillance (par foyer). Très déroutant. (Et démontre que c'est une erreur fondamentale d'utiliser un style avec un accent de couleur similaire à la couleur de surbrillance. Mieux utiliser la solution traditionnelle d'indiquer focus avec un plan uniquement.)
Vous devez vous connecter pour publier un commentaire.
Ce qui se passe est que le bouton accepte la focus d'entrée après qu'il a été cliqué, tout comme n'importe quel autre contrôle n'lorsque vous cliquez sur elle.
Et la façon dont Windows indique qu'un contrôle a le focus d'entrée (au moins sous le thème Aero) est un subtil surlignée en bleu.
Pour un contrôle de bouton en particulier, quand il a le focus d'entrée, simplement appuyer sur la touche Entrée touche "push" de ce bouton. C'est pourquoi le maintien de la surbrillance est très important, de sorte que l'utilisateur sait à quoi s'attendre.
La meilleure solution est de définir le focus à un contrôle différent dans votre fenêtre immédiatement après que l'utilisateur a cliqué sur le bouton. De cette façon, il ne sera plus automatiquement mis en surbrillance et aucune action ne sera déclenchée automatiquement lorsque l'utilisateur appuie sur la Entrée clé. (C'est le réel problème d'utilisabilité que vous essayez de résoudre, même si vous ne le connaissez pas encore. Rien n'est plus déroutant que d'un bouton par inadvertance obtenir cliqué lorsque l'utilisateur est en train d'essayer de saisir quelque chose.)
Vous pourrait empêcher le bouton de toujours faire la mise au point tout en définissant ses
peut recevoir le focus
de la propriété pour de faux, mais j'aimerais beaucoup vous recommandons de contre cette. Une fois que vous avez fait cela, il n'y aura aucun moyen pour l'utilisateur pour "appuyer" sur le bouton, en utilisant uniquement le clavier. Bien conçus, les applications doivent toujours être accessible aux utilisateurs qui préfèrent ne pas ou qui sont incapables d'utiliser la souris.Focusable = false
. La vraie question pour moi est que lorsqu'un de RFID jeton est numérisé, il types (virtuellement) un numéro à 10 chiffres, suivi de la touche Enter; que les boutons au hasard cliqué.Essayer de mettre
peut recevoir le focus
à false. Le bouton est cliquable mais ne va pas en rester concentré.C'est tout simplement du concentré de l'état. Pour le désactiver, vous devez changer le concentré de l'état. Il est plus facile en utilisant le Mélange.
Je ne recommande pas de réglage peut recevoir le focus à faux, car elle interfère avec l'aide du clavier
C'est l'apparence par défaut pour Aero boutons quand ils ont le focus. Vous pouvez soit définir
Focusable="False"
ou utilisez un Style personnalisé, qui ne rend pas les choses différemment lorsque le bouton a le focus. Quelque chose comme:Vous devez ajouter une référence à PresentationFramework.Aero.dll
J'avais besoin de faire quelque chose de similaire, mais dans le code au moment de l'exécution, elle ressemblait à ça
Vous pouvez voir que j'ai fait un commentaire de la ""RenderMouseOver" ligne
Mon premier espoir a été à l'aide de FrameworkElementFactory mais j'nécessaire pour créer le modèle par défaut.... TOUT À LA MAIN! 😉
À l'aide de
Il me donner le modèle que je voulais et ensuite enlever la Rendre section a été facile.
J'ai trouvé à 2 pas de la solution. La solution est peu drôle, mais de travail .
Mon referance postes sont;
Comment faire pour supprimer mondiale FocusVisualStyle à tous les Contrôles?
et
Application WPF en C#.NET 4.5 Définir la Position de la Souris
Une DLL doivent être importés , parce que WPF n'est pas soutenir directement le curseur de la souris se déplacer.
[DllImport("User32.dll")]
private static extern bool SetCursorPos(int X, int Y);
SetCursorPos(0, 0);
ButtonName.FocusVisualStyle = null;
Cela fonctionne pour moi .