2009-09-21 21 views
17

Ho scritto un semplice programma MSN che invierà e recupererà i messaggi utilizzando WCF. Il modulo principale contiene una casella di testo per digitare il messaggio da inviare. In background l'applicazione esegue il polling del server ogni pochi secondi per i nuovi messaggi. Quando viene ricevuto un nuovo messaggio, viene aperta una nuova finestra per visualizzarla. Questo deve essere fatto sul thread dell'interfaccia utente usando la classe Dispatcher.Come impedire a un nuovo modulo WPF di rubare lo stato attivo?

Il problema è che quando viene visualizzata la nuova finestra, lo stato attivo si sposta dal TextBox, in modo che la digitazione venga interrotta. Questo è molto fastidioso! In MSN Messenger è possibile continuare a digitare il proprio messaggio durante la ricezione. Com'è fatto?

Come soluzione temporanea, rimando il popup con il nuovo messaggio mentre il TextBox è attivo, ma dovrebbe esserci un modo migliore!

+1

C'è un modo per aprire una nuova finestra senza che sia messo a fuoco? –

risposta

46

La risposta è semplice: poiché i moduli .NET 3.5 SP1 WPF hanno una proprietà ShowActivated. Imposta questo su false e qualsiasi forma così contrassegnata non ruberà più fuoco!

+8

Un modulo WPF? Cos'è quello? –

-2

È possibile impostare la proprietà Focusable della finestra su false.

+1

Non in questo caso. L'utente deve essere in grado di interagire con il modulo – Dabblernl

-1

Nella mia applicazione ho bisogno di mostrare una finestra di notifica in cima a tutte le altre finestre mentre la mia MainWindow è ridotta a icona, ma senza rubare lo stato attivo.

Così Io faccio solo questo:

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.Topmost = true; 
    this.Topmost = false; 
} 
+1

Poiché l'evento caricato si attiva dopo che la finestra è già stata attivata e mostrata, ciò non si interrompe se si ruba lo stato attivo. – Wobbles

Problemi correlati