如何使用鼠标光标在屏幕上最大化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 。