Как я могу сделать окно WPF максимизируемым на экране с курсором мыши?

Согласно документации MSDN для Свойства WindowStartupLocation:

Установка CenterScreen заставляет окно быть расположенным в центр экрана, который содержит курсор мыши.

Хотя документ MSDN для самого Поля CenterScreen определяет его несколько менее ясно как:

Местоположение запуска окна является центром экрана, на котором это открыто.

Простой тест показывает эту работу, как это должно:

MainWindow.xaml



    

MainWindow.xaml.cs

using System.Windows;

namespace CenterScreenTest
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        void button_Click(object sender, RoutedEventArgs e)
        {
            Window window = new Window();
            window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
            window.Show();
        }
    }
}

Если Вы проверяете это в системе парного монитора, Вы видите, что новое окно будет центрироваться на экране, где курсор мыши - при нажатии кнопки. Это точно, как это должно работать.

Однако, при попытке установить окно для максимизации перед показом его то новое окно только максимизирует на дисплее, от которого Вы запустили приложение. Измените button_Click обработчик событий на следующее для наблюдения то, что я имею в виду:

void button_Click(object sender, RoutedEventArgs e)
{
    Window window = new Window();
    window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
    window.WindowState = WindowState.Maximized;
    window.Show();
}

Теперь окно только максимизирует на экране, с которого приложение запущено, неважно, где курсор мыши - при нажатии кнопки. При установке статуса окна на максимизируемый после показа его CenterScreen работает правильно. Это эквивалентно пользователю, максимизирующему окно. Например:

void button_Click(object sender, RoutedEventArgs e)
{
    Window window = new Window();
    window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
    window.Show();
    window.WindowState = WindowState.Maximized;
}

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

Кто-либо знает о решении?

44
задан Eben Geer 29 June 2010 в 22:52
поделиться

1 ответ

Я задал тот же вопрос на форуме MSDN WPF и получил ответ с этим замечательным обходным решением:

void button_Click(object sender, RoutedEventArgs e)
{
    Window window = new Window();
    window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
    window.SourceInitialized += (s, a) => window.WindowState = WindowState.Maximized;
    window.Show();
}

Я также отправил отчет об ошибке об этой проблеме в Microsoft, который в настоящее время рассматривается.

42
ответ дан 26 November 2019 в 21:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: