2012-03-30 5 views
6

Ich habe einen Suchbildschirm in meiner WPF-Anwendung. Der Bildschirm ist als UserControl in einem TabItem eines TabControl implementiert. Wenn der Benutzer zur Registerkarte Suchen wechselt, möchte ich, dass der Fokus in ein bestimmtes Feld wechselt.Wie finde ich heraus, wo der Fokus in meiner WPF-Anwendung liegt?

Also habe ich eine Loaded-Event-Handler zum UserControl-Tag in der Xaml hinzugefügt und ich rief die Focus-Methode des Steuerelements Ich möchte den ursprünglichen Fokus im Loaded-Event-Handler haben. Dies funktionierte großartig, bis ich die Telerik-Steuerbibliothek, die ich heute verwende, aktualisiert habe. Jetzt, wenn ich zur Registerkarte Suche wechsle, ist der Fokus NICHT in dem Feld, in dem ich es haben möchte, aber ich kann nicht sagen, welches Steuerelement den Fokus hat.

Das Feld, das ich bereits im Fokus haben möchte, hat GotFocus & LostFocus Event-Handler aus anderen Gründen. Ich erinnerte mich, dass in Win Forms die LostFocus-Ereignishandler-Argumente Ihnen sagen, welches Steuerelement den Fokus erhalten wird. Also habe ich einen Haltepunkt in meinem LostFocus-Handler & entdeckt, dass die Argumente für den LostFocus-Event-Handler in WPF diese Informationen nicht enthalten.

Wie kann ich herausfinden, wohin der Fokus geht, ohne GotFocus-Handler auf jede Steuerung in meinem UserControl zu setzen?

Tony

Antwort

5

können Sie versuchen, Ihren Haltepunkt setzen auf die LostKeyboardFocus Befestigt Ereignis statt des LostFocus Ereignis. Es verwendet die Klasse KeyboardFocusChangedEventArgs, die über Eigenschaften verfügt, die angeben, welches Element den Fokus hatte und wo der Fokus liegt.

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

Danke, das ist was ich brauchte. Ich konnte nicht leicht sagen, wohin der Fokus ging, weil es zu einer Checkbox ging, die ich auf dem Formular habe, und das zeigt den Fokus, indem ich eine gestrichelte Box um das Innere der Checkbox legte. Es ist winzig und schwer zu sehen, es sei denn, du suchst es wirklich. Zumindest ist es in meiner Anwendung. –

+0

@Tony Ich bin froh, dass es geholfen hat. –

8

Try Tab Taste drücken und sehen, ob es Ihnen die Kontrolle im Fokus hilft zu finden.

Sie können auch Snoop wie in diesem Q/A vorgeschlagen: Any tips on debugging focus issues in WPF?

Für den Anfang Snoop zeigt das aktuelle fokussierte Element und den aktuellen FocusScope in der Statusleiste.

können Sie es Ihnen, alle GotFocus und Lost-Focus-Ereignisse zu zeigen:

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. 

Ebenso können Sie die Focusmanager Ereignisse auf die gleiche Weise verfolgen.

+0

Danke, ich gebe es eine Chance am Morgen. –