2013-01-06 138 views
2

我注意到,如果我通過代碼移動我的WPF窗口,我將只會在窗口刷新時看到更改(如果我最小化然後最大化它)。
是否可以根據需要刷新WPF的GUI?刷新按需WPF窗口

編輯:我實際上試圖讓這個窗口跟在另一個窗口。

所以我掛接到其它窗口的事件:

m_wndParent = parent; 
    this.Owner = m_wndParent; 
    m_wndParent.SizeChanged += ParentSizeChanged; 
    m_wndParent.LayoutUpdated += ParentLocationChanged; 

,然後我改變窗口的位置:

private void ParentLocationChanged(object sender, EventArgs e) 
     { 
      Window parent = sender as Window; 
      this.Top = parent.Top; 
      this.Left = parent.Left; 
      this.UpdateLayout(); 
     } 
+0

你如何移動你的窗戶?請顯示你的代碼。 – Clemens

+0

我改變它的「左」和「頂」屬性。 – Idov

+0

這應該沒有任何額外的「刷新」工作。您何時或何時設置這些屬性?再次,顯示一些代碼。 – Clemens

回答

1

您應該將ParentLocationChanged處理程序添加到LocationChanged事件中,而不是LayoutUpdated(它具有完全不同的目的)。

m_wndParent.LocationChanged += ParentLocationChanged; 

private void ParentLocationChanged(object sender, EventArgs e) 
{ 
    var parent = sender as Window; 
    Top = parent.Top; 
    Left = parent.Left; 
} 
0

您應該掛接parent.LocationChanged,然後調用InvalidateVisual。請參閱MSDN for more details

+0

InvalidateVisual沒有必要。它只是設置Left和Top屬性。 – Clemens

+1

他問:「是否可以按需刷新WPF的GUI?」如果是這樣,他需要InvalidateVisual。如果他只是想設置位置,使窗口跟隨它的父母,那麼只有左/頂是必要的。 – Matthias

+0

他編輯了這個問題。顯然,他只是想要移動窗口。在這裏區分刷新(即UpdateLayout或InvalidateVisual)和移動桌面窗口很重要。這兩個是完全無關的,你至少應該在你的答案中指出。 – Clemens