2011-05-11 84 views
0

當WPF窗口第一次出現時,其內容似乎凍結。刷新內容我需要調整窗體大小,然後它將被修復。或者我打開TAB,然後找到一個列表框 - 它不可見 - 然後點擊它和中提琴!表單再次更新其內容。WPF窗體應調整大小以顯示其內容

您認爲如何?怪怪的?提前致謝!

enter image description here

編輯:

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.Show(); 

    while (!AppMain.needClose) 
    { 
     System.Windows.Forms.Application.DoEvents(); 
     DoThings(); 
    } 
} 

回答

1

調整窗口將迫使內部無效並重新油漆。當它裝逼它做同樣的你可以嘗試無效形式:

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.Show(); 

    this.Invalidate(); 

    while (!AppMain.needClose) 
    { 
     System.Windows.Forms.Application.DoEvents(); 
     DoThings(); 
    } 
} 

除非你正在做某種自定義消息抽水不過,標準的形式消息泵應該做的,而循環爲您服務。您可能會發現,因爲您正在攔截窗口加載的事件,所以您將停止初始化完成。

根據我的經驗,調用DoEvents是一種不好的代碼異味。如果您需要定期做某些事情,最好從某種計時器中觸發它。

+0

Invalidate()在WPF中無效。 – 2011-05-11 14:51:24

+1

然後嘗試從'window_loaded'方法中刪除所有代碼。 'DoThings();'做了什麼? – 2011-05-11 14:57:45

+0

我刪除了循環部分,現在沒有問題。最好的方法是什麼?我應該使用一次性計時器嗎? – 2011-05-11 15:02:08

1

當加載你的窗口,它已經顯示了,爲什麼你叫this.show()再次??

+0

我剛剛從Windows窗體移植到WPF。我刪除了該行。 – 2011-05-11 14:50:53

相關問題