2010-03-06 72 views
7

我的應用程序有一個托盤圖標,雙擊時隱藏或顯示應用程序窗口。我的問題是,如果它處於隱藏狀態時處於最小化狀態,我似乎無法將窗口置於前景。例如,假設用戶最小化應用程序,然後雙擊托盤圖標。應用程序窗口然後隱藏並從任務欄中消失。當用戶再次雙擊托盤圖標時,應該出現應用程序窗口,即它應該從最小化狀態恢復並被帶到前臺。WPF:即使明確設置WindowState,窗口也會保持最小化

下面的代碼應該能夠做到這一點,但由於某種原因,它不:

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

的應用程序都最小化,而不是帶到前臺。 Activate()返回true,並且隨後調用TrayIcon_DoubleClick()指示狀態確實設置爲正常

回答

12

我在MSDN論壇上發佈了我的問題,並在it got answered there上發佈了我的問題。引述答案:


的窗口,更像是方法的一些特性,在這個意義上它們會導致複雜的動作發生,需要經過前面的動作已經完成的情況發生。一種方法是使用Dispatcher.BeginInvoke。如果你改變你的代碼看起來像這樣,它應該工作:

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

我嘗試了這一點,它解決了這一問題對我來說。另外,我認爲你也可以省略this.Activate()

+5

好的,這解決了問題,但這很糟糕你不覺得嗎?我的意思是,你怎麼知道你什麼時候可以使用財產?我覺得這很奇怪... – 2011-09-20 13:33:44

1

我找到了一個更好的方法。當更改窗口的可見性和窗口狀態時發生問題,我所做的是更改屬性ShowInTaskBar而不是Visibility。無論如何,與ShowInTaskBar = true最小化的窗口就像一個隱藏的窗口。

0

從用戶角度看 單擊最小化圖標 然後這應該顯示應用程序的所有實例的列表。 用鼠標右鍵單擊此列表中的一個成員 選擇最大化。 注意右鍵單擊最小化的圖標會彈出一個菜單,其中包含關閉選項。 要獲得最大化選項,您需要右鍵單擊當您單擊圖標時出現的列表。

相關問題