WPF: Как установить позицию диалога, чтобы показать в центре приложения? - PullRequest
75 голосов
/ 29 ноября 2010

Как установить позицию Диалога, пришедшую из .ShowDialog();, для отображения в центре главных окон.

Так я пытаюсь установить позицию.

private void Window_Loaded(object sender, RoutedEventArgs e)
{        
    PresentationSource source = PresentationSource.FromVisual(this);
    if (source != null)
    {
        Left = ??
        Top = ??
    }
}

Ответы [ 14 ]

0 голосов
/ 02 апреля 2019

Если у вас мало контроля над окнами, которые вам нужно показать, следующий фрагмент кода может быть полезен

0 голосов
/ 14 мая 2018

Для дочернего окна установите на XAML

WindowStartupLocation="CenterOwner"

Чтобы вызвать ваше дочернее окно как диалог и центр родительского окна, вызовите его из родительского окна, например,

private void ConfigButton_OnClick(object sender, RoutedEventArgs e)
{
    var window = new ConfigurationWindow
    {
        Owner = this
    };
    window.ShowDialog();
}
0 голосов
/ 22 мая 2017

Этот код работает, если вы не хотите использовать свойство WindowStartupLocation в xaml:

private void CenterWindowOnApplication()
{
    System.Windows.Application curApp = System.Windows.Application.Current;
    Window mainWindow = curApp.MainWindow;
    if (mainWindow.WindowState == WindowState.Maximized)
    {
        // Get the mainWindow's screen:
        var screen = System.Windows.Forms.Screen.FromRectangle(new System.Drawing.Rectangle((int)mainWindow.Left, (int)mainWindow.Top, (int)mainWindow.Width, (int)mainWindow.Height));
        double screenWidth = screen.WorkingArea.Width;
        double screenHeight = screen.WorkingArea.Height;
        double popupwindowWidth = this.Width;
        double popupwindowHeight = this.Height;
        this.Left = (screenWidth / 2) - (popupwindowWidth / 2);
        this.Top = (screenHeight / 2) - (popupwindowHeight / 2);
    }
    else
    {
        this.Left = mainWindow.Left + ((mainWindow.ActualWidth - this.ActualWidth) / 2;
        this.Top = mainWindow.Top + ((mainWindow.ActualHeight - this.ActualHeight) / 2);
    }
}

Я использую "screen.WorkingArea", потому что панель задач делает mainWindow меньше.Если вы хотите разместить окно посередине экрана, вместо него можно использовать «screen.Bounds».

0 голосов
/ 22 марта 2017

XAML:

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