2008-12-06 55 views
1

我使用下面的代碼在重新啓動時保存和恢復窗口位置和大小。在WPF中恢復窗口位置和大小時漂移

我正在觀察向上漂移28個像素,每次執行此代碼

我讀的是錯誤的數值,還是我錯誤地恢復它們?數28(鉻的大小?)來自哪裏(以及如何以編程方式說明它,而不是代碼中的固定數字)?

這裏是我的代碼:

public partial class MainStudioWindowControl : RibbonWindow 
{ 
    public MainStudioWindowControl() 
    { 
     App.MainWindowOwner = this; 
     this.Loaded += new System.Windows.RoutedEventHandler(MainStudioWindowControl_Loaded); 
    } 

    void MainStudioWindowControl_Loaded(object sender, System.Windows.RoutedEventArgs e) 
    { 
     System.Windows.Window mainWindow = System.Windows.Application.Current.MainWindow; 
     mainWindow.WindowStartupLocation = System.Windows.WindowStartupLocation.Manual; 
     if (Studio.Properties.Settings.Default.Width > 0) 
     { 
      mainWindow.Left = Studio.Properties.Settings.Default.Left; 
      mainWindow.Top = Studio.Properties.Settings.Default.Top; 
      mainWindow.Width = Studio.Properties.Settings.Default.Width; 
      mainWindow.Height = Studio.Properties.Settings.Default.Height; 
     } 
     Debug.WriteLine(string.Format("Loading: Top = {0}", this.Top)); 
    } 

    protected override void OnClosing(System.ComponentModel.CancelEventArgs e) 
    { 
     base.OnClosing(e); 
     System.Windows.Window mainWindow = System.Windows.Application.Current.MainWindow; 
     Studio.Properties.Settings.Default.Left = mainWindow.Left; 
     Studio.Properties.Settings.Default.Top = mainWindow.Top; 
     Studio.Properties.Settings.Default.Width = mainWindow.Width; 
     Studio.Properties.Settings.Default.Height = mainWindow.Height; 
     Studio.Properties.Settings.Default.Save(); 
     Debug.WriteLine(string.Format("Saving: Settings.Top = {0}", Studio.Properties.Settings.Default.Top)); 
    } 
} 

回答

3

試試這個:

1)從正常窗口派生類,而不是RibbonWindow - 能否解決,這是一個RibbonWindow問題。

2)使用硬編碼的值來設置加載處理程序中的度量值 - 如果修復了這個問題,問題就與設置有關。

有了這兩個改變,它對我來說工作得很好。窗戶出現在每次它應該在的地方。

+0

是的,我敢打賭,當你設置Top屬性時,RibbonWindow沒有考慮到Windows標題欄,但是當你得到它時會這樣做。 – 2008-12-06 16:46:17