Смещение при восстановлении расположения и размера окна в WPF - PullRequest
1 голос
/ 06 декабря 2008

Я использую код ниже, чтобы сохранить и восстановить положение и размер окна при перезапуске.

Я наблюдаю смещение вверх на 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));
    }
}

1 Ответ

3 голосов
/ 06 декабря 2008

Попробуйте это:

1) Получите ваш класс из обычного окна, а не из окна RibbonWindow - если это исправляет, проблема с RibbonWindow.

2) Используйте жестко запрограммированные значения для установки измерений в обработчике Loaded - если это исправляет, проблема связана с настройками.

С этими двумя изменениями у меня все работало нормально. Окно появлялось там, где и должно было каждый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...