2010-05-04 119 views
1

我試圖將自定義對話框的位置保存到用戶註冊表中,以便當它們重新加載同一個對話框時,它將出現在它們移動或調整到之前的相同位置。 我保存的Windows X位置Y位置的寬度和高度。除了最小化對話框時,它一切正常。如果對話框被最小化,並且用戶右鍵單擊任務欄上的對話框表示(Windows 7),則可以單擊「關閉此窗口」。奇怪的是,號碼-32030被保存在註冊表中作爲X和Y位置,但寬度和高度被正確保存。任何想法這個數字來自於什麼和在這種情況下做什麼thxWPF中最小化的窗口位置

回答

6

你想是這樣的,當你保存窗口位置:

if (this.WindowState == WindowState.Normal) 
{ 
    Properties.Settings.Default.Top = Top; 
    Properties.Settings.Default.Left = Left; 
    Properties.Settings.Default.Height = Height; 
    Properties.Settings.Default.Width = Width; 
} 
else 
{ 
    Properties.Settings.Default.Top = RestoreBounds.Top; 
    Properties.Settings.Default.Left = RestoreBounds.Left; 
    Properties.Settings.Default.Height = RestoreBounds.Height; 
    Properties.Settings.Default.Width = RestoreBounds.Width; 
    // Check for WindowState.Maximized or WindowState.Minimized if you 
    // need to do something different for each case (e.g. store if application 
    // was Maximized 
} 

最重要的一點是,你需要在最大化或最小化的窗口RestoreBounds。代碼可能會被重構,使其更有效率,但你明白了。

3

我想你正在更新窗口的位置,當窗口關閉?如果是這樣,有幾個解決方案。

1)將窗口位置保存在不同的事件上,例如當窗口被調整大小或移動時。 2)在保存X和Y位置之前檢查窗口是否已最小化。

例子:

switch (this.WindowState) 
{ 
    case WindowState.Maximized: 
     // don't update the X,Y 
     break; 
    case WindowState.Minimized: 
     // don't update the X,Y 
     break; 
    case WindowState.Normal: 
     // DO update the X,Y 
     break; 
}