В соответствии с документацией 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;
}
Проблема здесь, конечно, заключается в том, что максимизация окна после его показа занимает гораздо больше времени, а в приложении, таком как мое, окно должно немедленно встать на место.
Кто-нибудь знает решение?