2012-03-30 10 views
6

Ho una schermata di ricerca nella mia applicazione WPF. Lo schermo è implementato come UserControl in un TabItem di un TabControl. Quando l'utente passa alla scheda Cerca, voglio che lo stato attivo vada in un campo particolare.Come faccio a sapere dove sta andando l'attenzione nella mia applicazione WPF?

Così ho aggiunto un gestore di eventi Loaded al tag UserControl in Xaml e ho chiamato il metodo Focus del controllo che voglio avere il focus iniziale nel gestore di eventi Loaded. Questo ha funzionato bene fino a quando ho aggiornato la libreria di controllo Telerik che sto usando oggi. Ora, quando passo alla scheda Cerca, lo stato attivo NON è nel campo che voglio averlo, ma non posso dire quale controllo ha l'attenzione.

Il campo che desidero avere già attivo ha GotFocus & Gestori di eventi LostFocus per altri motivi. Mi sono ricordato che in Win Form, gli argomenti del gestore di eventi di LostFocus ti dicono quale controllo avrà il focus. Quindi ho inserito un punto di interruzione nel gestore di LostFocus. & ha rilevato che gli argomenti del gestore di eventi LostFocus in WPF non includono tali informazioni.

Come posso capire dove sta andando l'attenzione senza mettere i gestori di GotFocus su ogni controllo nel mio UserControl?

Tony

risposta

5

È possibile provare a inserire il punto di interruzione sull'evento anziché l'evento LostFocus. Usa la classe KeyboardFocusChangedEventArgs che ha proprietà che mostrano quale elemento aveva lo stato attivo e dove sta andando l'attenzione.

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

Grazie, questo è quello di cui avevo bisogno. Non riuscivo a capire dove si stava concentrando, perché è andato a una casella di controllo che ho sul modulo, e questo mostra l'attenzione mettendo un riquadro tratteggiato all'interno della casella di controllo. È minuscolo e difficile da vedere se non lo si sta davvero cercando. Almeno, è nella mia domanda. –

+0

@Tony sono contento che sia stato d'aiuto. –

8

provare a premere Tab chiave e vedere se ti aiuta a trovare il controllo a fuoco.

È inoltre possibile utilizzare Snoop come suggerito in questo Q/A: Any tips on debugging focus issues in WPF?

Per cominciare, Snoop mostra l'elemento focalizzato corrente e la corrente FocusScope nella barra di stato.

È possibile ottenere per mostrare tutti gli eventi GotFocus e 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. 

Allo stesso modo è possibile monitorare gli eventi FocusManager allo stesso modo.

+0

Grazie, gli darò uno scatto al mattino. –

Problemi correlati