2013-03-19 2 views
6

J'ai un contrôle utilisateur qui comporte plusieurs éléments enfants, y compris des cases à cocher et des zones de texte.Empêche le déclenchement de LostFocus lorsque les éléments enfants perdent le focus

Je souhaite déclencher l'événement LostFocus pour mon contrôle utilisateur seulement lorsque le focus est perdu sur l'ensemble du contrôle utilisateur (par exemple en cliquant sur un bouton en dehors du contrôle utilisateur).

Actuellement, l'événement LostFocus se déclenche également lorsque je me déplace entre les éléments enfants de mon contrôle utilisateur, par ex. d'un textbox à l'autre.

Répondre

-1
protected override void OnLostFocus(EventArgs args) 
{ 
     if (!ContainsFocus) 
     { 
      // Only do something here 
     } 
} 

L'astuce consiste à vérifier ContainsFocus

Dans votre constructeur, vous aurez probablement à ajouter un code similaire à ce qui suit pour capter l'attention perdu de vos contrôles enfants (comme vous n'obtiendrez notification directe quand ils perdent le focus à un autre endroit) en appelant

CaptureLostFocus(this); 

et la mise en œuvre:

void CaptureLostFocus(Control control) 
{ 
     foreach(Control child in control.Controls) 
     { 
      child.LostFocus += (s, e) => OnLostFocus(e); 
      CaptureLostFocus(control); 
     } 
} 
+4

D'après ce que je peux voir, il n'y a pas de ContainsFocus dans WPF pour vérifier – binncheol

+0

Je ne pense pas non plus qu'il y ait une propriété Controls sur un Control. – Ben

+1

Comment cela n'a-t-il pas été réduit? On dirait qu'il parle de winforms, pas de wpf. – person27

Questions connexes