2010-03-06 11 views
7

La mia applicazione ha un'icona nella barra delle applicazioni che, quando fa doppio clic, nasconde o mostra la finestra dell'applicazione. Il mio problema è che non riesco a portare la finestra in primo piano se si trovava in uno stato ridotto a icona quando era nascosta.WPF: finestra minimizzata anche quando si imposta WindowState in modo esplicito

Ad esempio, supponiamo che l'utente riduca a icona l'applicazione e quindi fa doppio clic sull'icona del vassoio. La finestra dell'applicazione viene quindi nascosta e scompare dalla barra delle applicazioni. Quando l'utente fa nuovamente doppio clic sull'icona della barra delle applicazioni, dovrebbe apparire la finestra dell'applicazione, ovvero dovrebbe essere ripristinata dallo stato ridotto a icona e portata in primo piano.

Il codice qui sotto dovrebbe fare proprio questo, ma per qualche motivo non è così:

private void TrayIcon_DoubleClick(object sender, EventArgs e) 
{ 
    if (this.Visibility == Visibility.Hidden) 
    { 
     this.Visibility = Visibility.Visible; 
     this.WindowState = WindowState.Normal; 
     this.Activate(); 
    } 
    ... 
} 

L'applicazione rimane ridotto al minimo e non viene portata in primo piano. Activate() restituisce true e le chiamate successive a TrayIcon_DoubleClick() indicano che lo stato è effettivamente impostato su Normale.

risposta

12

Ho incrociato la mia domanda sui forum MSDN e it got answered there. Per citare la risposta:


Alcune immobili in Finestra che sono più simili metodi, nel senso che provocano azioni complesse per accadere, hanno bisogno di accadere dopo l'azione precedente ha già completato. Un modo per farlo è usare Dispatcher.BeginInvoke. Se si modifica il codice per apparire come questo, dovrebbe funzionare:

if (this.Visibility == Visibility.Hidden) 
{ 
    this.Visibility = Visibility.Visible; 
    Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, 
     new Action(delegate() 
     { 
      this.WindowState = WindowState.Normal; 
      this.Activate(); 
     }) 
    ); 
} 

Ho provato questo e ha risolto il problema per me. Inoltre, penso che si possa tralasciare anche lo this.Activate().

+5

Ok, questo risolve il problema ma che schifo non credi? Voglio dire, come dovresti sapere quando puoi usare una proprietà o no? Trovo questo molto strano ... –

1

Ho trovato un modo migliore. Poiché il problema si verifica quando si modifica la visibilità della finestra e lo stato della finestra, ciò che faccio è modificare la proprietà ShowInTaskBar anziché Visibility. In ogni caso una finestra ridotta a icona con ShowInTaskBar = true è come una finestra nascosta.

0

Dal punto di vista utente Fare clic sull'icona minimizzata Questo dovrebbe quindi mostrare un elenco di tutte le istanze dell'applicazione. fare clic con il tasto destro su un membro di questo elenco selezionare ingrandire. Nota facendo clic con il tasto destro sull'icona minimizzata verrà visualizzato un menu con l'opzione Chiudi. Per ottenere l'opzione Ingrandisci è necessario fare clic con il tasto destro del mouse sull'elenco visualizzato quando si fa clic sull'icona.

Problemi correlati