2012-06-28 7 views
5

Sto lavorando a un progetto WPF e sto provando a generare un evento ogni volta che alcuni userControls diventano attivi o inattivi.Come sapere se l'UserControl è attivo diverso dall'uso di IsFocused

Questi userControls hanno molti altri controlli all'interno di essi.

ho cercato di ottenere questo utilizzando gli eventi UserControl GotFocus e LostFocus, ma questi eventi non funzionano nel modo che ho bisogno dal momento che l'UserControl perde la messa a fuoco quando lavoro con i controlli all'interno di esso.

Quindi, la mia domanda è: C'è un modo per mantenere un controllo utente come Active mentre l'utente lavora con i controlli all'interno di esso, e, quando l'utente passa a un altro UserControl questa prima si ottiene Inactive ???

Grazie in anticipo.

+2

Hai provato [UIElement.IsKeyboardFocusWithinChanged Event] (http://msdn.microsoft.com/en-us/library/system.windows.uielement.iskeyboardfocuswithinchanged)? – LPL

+0

@LPL, l'ho appena provato, ma quando viene visualizzato il controllo utente l'evento si alza infinitamente – Dante

+2

@Dante Stai usando un punto di interruzione? Un punto di interruzione causerà la perdita di messa a fuoco di 'UserControl', quindi Continuing lo renderà nuovamente attivo, causando il loop infinito. – Rachel

risposta

2

Potrei risolvere il mio problema grazie ai commenti di @LPL e @Rachel.

Ho dovuto utilizzare l'evento UIElement.IsKeyboardFocusWithinChanged e ha funzionato perfettamente.

In un primo momento ho avuto un problema che è stato che il metodo di callback veniva sollevata all'infinito, ma il vero problema era che stavo mostrando un MessageBox ogni volta che l'evento IsKeyboardFocusWithinChanged sollevato, quindi, questo ha causato che la proprietà IsKeyboardFocusWithin cambiato ed è creato un ciclo infinito. Ma grazie al consiglio di Rachel ho potuto capire come risolverlo.

0

Non sono sicuro, ma un workarounnd può essere sul focus perso del controllo control se il controllo che ha il focus è figlio del tuo control se è write solo return se non è quindi basta scrivere la logica cosa vuoi su perso il focus del tuo controllo. Spero che questo possa aiutare

Problemi correlati