2013-03-19 12 views
6

Mam Kontrolę użytkownika, która ma wiele elementów podrzędnych, w tym pola wyboru i pola tekstowe.Zapobieganie wyzwoleniu LostFocus, gdy elementy potomne tracą ostrość

Chciałbym wywołać zdarzenie LostFocus dla mojej Kontroli użytkownika tylko, gdy fokus zostanie utracony na całej Kontroli użytkownika (np. Kliknięcie przycisku poza Kontrolą użytkownika).

Obecnie zdarzenie LostFocus jest również wyzwalane, gdy przechodzę pomiędzy elementami podrzędnymi kontrolki użytkownika, np. z jednego pola tekstowego do drugiego.

Odpowiedz

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

Sztuką jest, aby sprawdzić ContainsFocus

w twojej konstruktora będziesz prawdopodobnie będzie musiał dodać kod podobny do poniższego uchwycić stracił ostrość formantów podrzędnych (jak nie dostaniesz bezpośrednie powiadomienie gdy tracą ostrość gdzieś indziej), wywołując

CaptureLostFocus(this); 

i wykonawcze:

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

Z tego, co widzę, nie ma ContainsFocus w WPF, aby sprawdzić przed – binncheol

+0

Nie sądzę, nie ma właściwości Controls na formantu albo. – Ben

+1

Jak to się nie zmieniło? Wygląda na to, że mówi się o winformach, a nie o WPF. – person27

Powiązane problemy