2012-03-30 12 views
6

Mam ekran wyszukiwania w mojej aplikacji WPF. Ekran jest zaimplementowany jako UserControl w TabItem TabControl. Gdy użytkownik przełącza się na kartę Wyszukaj, chcę, aby fokus znalazł się w jednym konkretnym polu.Jak mogę się dowiedzieć, gdzie skupia się fokus w mojej aplikacji WPF?

Dodałem więc załadowaną procedurę obsługi zdarzeń do znacznika UserControl w Xaml i nazwałem metodę Focus kontrolki Chcę mieć początkową fokus w obsadzie Loaded. To działało świetnie, dopóki nie zaktualizowałem biblioteki kontrolnej Telerik, której używam dzisiaj. Teraz, kiedy przełączam się na zakładkę Wyszukaj, fokus NIE jest w polu, w którym chcę go mieć, ale nie mogę powiedzieć, na czym steruje fokus.

Pole, na którym chcę się skupić, już ma GotFocus & Obsługa zdarzeń LostFocus z innych powodów. Przypomniałem sobie, że w Win Forms argumenty obsługi zdarzeń LostFocus mówią, która kontrola ma się skupić. Więc umieściłem punkt przerwania w moim programie obsługi LostFocus & odkrył, że argumenty obsługi zdarzenia LostFocus w WPF nie zawierają tych informacji.

W jaki sposób mogę dowiedzieć się, gdzie skupia się fokus, bez korzystania z funkcji obsługi GotFocus na każdym sterowniku w moim sterowniku UserControl?

Tony

Odpowiedz

5

Można spróbować umieścić swój punkt przerwania na LostKeyboardFocus Dołączone Event zamiast LostFocus Event. Używa klasy KeyboardFocusChangedEventArgs, która ma właściwości, które pokazują, który element miał fokus i gdzie skupia się fokus.

private void textBox1_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
{ 
    textBox1.Text = ((FrameworkElement)e.NewFocus).Name ; 
} 
+0

Dzięki, to jest to, czego potrzebowałem. Nie mogłem łatwo stwierdzić, w którym kierunku się znajduje, ponieważ trafiło ono do pola wyboru, które mam w formularzu, a to pokazuje fokus, umieszczając przerywane pole wokół pola wyboru. Jest mały i trudny do zobaczenia, chyba że naprawdę tego szukasz. Przynajmniej jest w mojej aplikacji. –

+0

@ Tony Cieszę się, że pomogło. –

8

Spróbuj nacisnąć Tab klucz i zobacz czy to pomaga znaleźć kontrolę w centrum uwagi.

Można również użyć Snoop jak zasugerowano w tym Q/A: Any tips on debugging focus issues in WPF?

Na początek, Snoop pokazuje aktualny skoncentrowane elementu i aktualny FocusScope na pasku stanu.

można dostać to, aby pokazać wszystkie wydarzenia GotFocus i LostFocus:

1. Run your app. 
2. Run Snoop. 
3. Choose your app in the dropdown. 
4. Click the binoculars ("Snoop") button. 
5. On the right pane, click the Events tab. 
6. Click to bring down the dropdown. 
7. Scroll down to the Keyboard section and check GotKeyboardFocus, LostKeyboardFocus, and optionally the PreviewXXX events. 
8. Now do what you need to do to manipulate focus and watch the Snoop window. 

Podobnie można śledzić Wydarzenia focusManager ten sam sposób.

+0

Dzięki, dam mu zastrzyk rano. –

Powiązane problemy