根据WindowStartupLocation 属性的 MSDN 文档:
设置 CenterScreen 会导致一个窗口位于包含鼠标光标的屏幕中心。
尽管CenterScreen 字段本身的 MSDN 文档将其定义为:
窗口的启动位置是打开它的屏幕的中心。
一个简单的测试表明它可以正常工作:
主窗口.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>
主窗口.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;
}
当然,这里的问题是,在显示窗口后最大化窗口需要更长的时间,并且在像我这样的应用程序中,窗口需要立即弹出到位。
有人知道解决方案吗?