2011-08-26 52 views
12

Ho una finestra WPF che non chiudo. Invece faccio Hide() e Show() it. Ora, quando faccio doppio clic sul mio MainWindow in una griglia su un record, che farà scattare a Show() la finestra, la finestra verrà sempre visualizzata dietro la finestra principale. Ho provato il vuoto sanitario, ma senza successo:WPF - Porta finestra in primo piano

view.Show(); 
view.Activate(); 
view.Topmost = true; 
view.Topmost = false; 
view.Focus();  

c'è un altro modo che posso usare per portare la finestra absolut al fronte? Non riesco a impostare MainWindow come proprietario.

+1

Stai andando a devo elaborare "Non posso impostare MainWindow come proprietario". – vcsjones

+0

Non imposterò MainWindow come proprietario sulla mia vista perché non esiste alcuna relazione tra Windows. E dovrei essere in grado di aprire molte di queste finestre. – BennoDual

+2

possibile duplicato di [Porta una finestra in primo piano in WPF] (http://stackoverflow.com/questions/257587/bring-a-window-to-the-front-in-wpf) – CodeNaked

risposta

27

Window.Activate è la strada da percorrere (se non si desidera impostare il proprietario). Se questo non funziona (come descrivi), c'è un errore in un'altra posizione. Forse la tua MainWindow ha TopMost impostato su true? O hai una chiamata differita che focalizza la tua finestra principale o un controllo all'interno?

Chiamare ShowDialog() come proposto in un'altra risposta non è un'opzione a meno che non si desideri che l'intera app sia bloccata fino alla chiusura della finestra modale aperta.

C'è un error in Win32-Api che influenza anche la gestione delle finestre in WPF, ma la descrizione del problema non suona così.

Inoltre qui un hack, ma spero che tu non ne hai bisogno:

Dispatcher.BeginInvoke(new Action(delegate {  
     view.Activate(); 
     }), System.Windows.Threading.DispatcherPriority.ContextIdle, null); 
+0

Grazie, solo questa soluzione ha risolto il problema descritto per me. – Sevenate

4

ShowDialog anziché Show consentirà di visualizzare sempre la finestra in alto.

+0

+1 Probabilmente la risposta! – CharithJ

+3

Non penso che questa sia la risposta, a meno che l'OP non voglia bloccare le altre finestre fintanto che è aperta la finestra aggiuntiva aperta. Per me la domanda suona non è così. – HCL

+0

Vuole portarlo in cima, non farlo diventare un modello. – Oli

2
myWindow.WindowState = WindowState.Normal; 

che ha lavorato per me.

1

Ho avuto lo stesso problema: stavo mostrando una finestra con il proprietario impostato su NULL da un evento MouseDoubleClick. Mi sono reso conto (eventualmente) che avevo bisogno di impostare:

e.Handled = true

prima che il mio codice evento completato. Il seguente documento di Microsoft delinea che si consiglia di contrassegnare un evento come gestito quando risponde in modo "significativo e relativamente completo":

http://msdn.microsoft.com/en-us/library/ms747183.aspx

questo è soggettivo, ma nel mio caso è stato impedendo la finestra Ho appena aperto per essere visibile all'utente.

1

Ho riscontrato un problema simile e ho trovato una soluzione utilizzando una combinazione delle altre risposte. Una volta che la finestra è nascosta l'ho messo in primo piano con il seguente codice:

view.WindowState = WindowState.Normal; 
    view.Activate(); 

Nota: Se la finestra è stata ingrandita prima di nascondere, che il codice farò tornare come massimizzata

+0

Questo ha funzionato per me, e proprio dritto Activate no. Grazie mille per il suggerimento! – ravuya

Problemi correlati