В соответствии с документацией MSDN для Свойства WindowStartupLocation:
Настройка CenterScreen вызывает расположение окна в центре экрана, содержащего курсор мыши.
Хотя документ MSDN для CenterScreen Field сам определяет его несколько менее четко:
Начальное расположение окна - это центр экрана, на котором он открывается.
Простой тест показывает, как это работает:
MainWindow.xaml
<Window x:Class="CenterScreenTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button Click="button_Click">Open Window</Button>
</Window>
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;
}
Проблема здесь, конечно, в том, что максимизация окна после показа его занимает гораздо больше времени, и в приложении, таком как мое, окно должно появляться сразу.
Кто-нибудь знает о решении?