2011-12-02 6 views
0

J'ai un problème avec le filigrane. J'ai un gestionnaire d'événements keydown comme celui-ci.Dilemme avec filigrane sur KeyDown

if (e.Key == Key.Tab) 
     { 
      FocusManager.GetFocusedElement(); 

      if (FocusManager.GetFocusedElement() == txtPassword) 
       btnLogin.Focus(); 
      else if (FocusManager.GetFocusedElement() == txtUserName) 
       txtPassword.Focus(); 
      else 
       txtUserName.Focus(); 
     } 

il fonctionne très bien, mais quand l'accent est mis sur btnLogin, lorsque vous appuyez sur l'onglet, l'accent va directement à la boîte de mot de passe. J'ai inséré des points d'arrêt en vain. Il ne transmet le code qu'une seule fois et entre dans l'instruction else. Des idées? Merci pour toutes les réponses.

+0

Y at-il une raison particulière pour laquelle vous n'utilisez pas la fonctionnalité de tabulation intégrée? –

+0

@competent_tech oui. C'est parce que nous avons quelques problèmes techniques en cours d'exécution de cette application sur MAC. Le problème sur Mac est que lorsque je tabulation de txtUserName, la tabulation va à la barre d'adresse sur le navigateur. C'est pourquoi j'essaie de coder en dur celui-ci. – Nathan

+0

Ouch. Je suppose que vous avez vérifié les tabindexes sur les contrôles pour être sûr qu'ils sont dans le bon ordre au cas où l'implémentation de mac est juste en train de les sélectionner? –

Répondre

1

Vous ne savez pas ce qu'est le filigrane, mais cela est généralement dû au fait que vous interceptez l'onglet et que vous faites quelque chose, puis l'événement se répande et est à nouveau géré par le gestionnaire par défaut.

Essayez de consommer l'événement, afin que cela ne se produise pas. Peut-être quelque chose comme e.preventDefault(), ou e.stopPropagation()

+0

cela m'a donné une idée. J'ai ajouté e.Handled = true sur la tabulation, et il a fonctionné presque comme n'importe quel autre site. Merci. – Nathan