如何使用鼠标光标在屏幕上最大化WPF窗口?

根据WindowStartupLocation属性的MSDN文档:

设置CenterScreen会使窗口位于包含鼠标光标的屏幕中央。

虽然CenterScreen字段的MSDN文档本身将其定义为:

窗口的启动位置是打开窗口的中心。

一个简单的testing显示这个工作应该是这样的:

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(); } } } 

如果您在双显示器系统上进行testing,则可以看到当您单击button时,新窗口将居中在鼠标光标所在的屏幕上。 这正是它应该如何工作。

但是 ,如果您在显示窗口之前尝试将窗口设置为最大化,那么新窗口只会在启动应用程序的显示器上最大化。 将button_Click事件处理程序更改为以下内容以查看我的意思:

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

现在,窗口只会在启动应用程序的屏幕上最大化,无论您单击button时鼠标指针在哪里。 如果您在显示后将窗口状态设置为最大化,CenterScreen将正常工作。 这相当于用户最大化窗口。 例如:

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

这里的问题当然是,在显示窗口后最大化窗口需要更长时间,而在像我这样的应用程序中,窗口需要立即popup。

任何人都知道解决scheme?

你可以在XAML中设置它

 <Window Height="300" Width="300" WindowState="Maximized"> </Window> 

您需要将SizeToContent设置为手动 。 查看其他答案的细节。

我问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(); } 

我还向微软提交了一个关于这个问题的错误报告 ,他们正在审查。

确保SizeToContent被设置为SizeToContent.Manual,否则不起作用。

从窗口最大化开始,可以通过以下添加到XAML标记来实现。

 <Window Height="300" Width="300" WindowState="Maximized" SizeToContent="Manual"> </Window> 

WindowState属性从属于SizeToContent ,这意味着你需要设置后者的Manual (如果你希望实际的最大化)。 您还可以将SizeToContent设置为高度宽度 (如果您想在一个维度上最大化窗口,而服从基于另一维度中控件大小计算的大小)。

 <Window Height="300" Width="300" WindowState="Maximized" SizeToContent="Width"> </Window> 

以上将使窗口从上到下跨越,但不一定是从左到右的边缘。 这相当于按下组合键Win + Shift + Up