【发布时间】:2011-03-08 12:08:18
【问题描述】:
根据 WindowStartupLocation Property 的 MSDN 文档:
设置 CenterScreen 会使窗口位于包含鼠标光标的屏幕中心。
尽管CenterScreen Field 的 MSDN 文档本身将其定义为不太清楚:
窗口的启动位置是打开它的屏幕的中心。
一个简单的测试表明它可以正常工作:
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;
}
当然,这里的问题是,在显示窗口后最大化窗口需要更长的时间,而且在像我这样的应用程序中,窗口需要立即弹出到位。
有人知道解决办法吗?
【问题讨论】:
-
tl;dr: 将
WindowStartupLocation设置为CenterScreen以使用鼠标光标在屏幕上打开它;然后在Loaded事件中添加this.WindowState = WindowState.Maximized;。 (在 Windows 10 上,如果您这样做,它只会以最大化方式打开,并且在屏幕上使用鼠标光标;因为在窗口首次显示之前加载会触发。)
标签: .net wpf multiple-monitors maximize windowstate