1

我正在使用下面的代码在重新启动时保存和恢复窗口位置和大小。

每次执行此代码时,我都会观察到 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));
    }
}
4

1 回答 1

3

试试这个:

1)从普通窗口派生你的类,而不是 RibbonWindow - 如果可以解决它,这是一个 RibbonWindow 问题。

2) 使用硬编码值在 Loaded 处理程序中设置测量值 - 如果可以修复它,则问题与设置有关。

通过这两个更改,它对我来说效果很好。窗口每次都出现在它应该出现的地方。

于 2008-12-06T15:56:49.540 回答