Как отобразить дочернее окно в центре MainWindow после максимизации в WPF?

У меня есть дочернее окно с высотой = 300 и шириной = 400. Когда я максимизирую это дочернее окно, оно отображается слева = 0 и сверху = 0. Я хочу, чтобы оно отображалось в центре MainWindow.

Я пробовал следующие способы

  • В событии Window_StateChanged я попытался изменить его положение как левое = 100 и верхнее = 140. Значения присваиваются, но все равно отображаются в левом = 0 и верхнем = 0 положении.

  • Я также пытался изменить его положение в событии Window_SizeChanged, но это также не сработало.

  • Затем я почувствовал, что макет может не обновляться, поэтому я обновил его с помощью this.UpdateLayout(), но не сработал.


person user3794868    schedule 01.07.2014    source источник
comment
Развернутое и центрированное обычно не сочетаются друг с другом... Вы спрашиваете, как удерживать элемент управления в центре главного окна?   -  person bdimag    schedule 01.07.2014
comment
Я хочу, чтобы мое дочернее окно находилось в той же позиции после максимизации. Оно должно увеличивать свой размер, но не положение.   -  person user3794868    schedule 02.07.2014
comment
‹Window x:Class=MyClass.Window1 Title=Window1 Loaded=Window_Loaded Focusable=True ShowInTaskbar=False ResizeMode=CanResize MaxHeight=600 MaxWidth=700 LocationChanged=Window_LocationChanged StateChanged=Window_StateChanged› ‹/Window›   -  person user3794868    schedule 02.07.2014
comment
Здесь происходит кое-что интересное, в чем я не совсем разобрался: wpf-shell-integration-library" title="окно за пределами экрана при максимизации с помощью библиотеки интеграции оболочки wpf">stackoverflow.com/questions/2967218/ (Microsoft.Windows.Shell находится в NuGet)   -  person bdimag    schedule 03.07.2014


Ответы (1)


это может быть то, что вам нужно

    void Window1_StateChanged(object sender, EventArgs e)
    {
        if (this.WindowState == System.Windows.WindowState.Maximized)
        {
            this.WindowState = System.Windows.WindowState.Normal;
            this.Left = (App.Current.MainWindow.Width - this.MaxWidth) / 2 + App.Current.MainWindow.Left;
            this.Top = (App.Current.MainWindow.Height - this.MaxHeight) / 2 + App.Current.MainWindow.Top;
            this.Width = this.MaxWidth;
            this.Height = this.MaxHeight;
        }
    }
person bdimag    schedule 02.07.2014
comment
Спасибо за ваши усилия, братан, но теперь, делая это, состояние окна становится нормальным, и я не смогу восстановить вниз. - person user3794868; 03.07.2014