如何在屏幕上居中放置WPF应用程序?


110

我想在启动时在主屏幕上将WPF应用居中。我知道我必须设置myWindow.Left和myWindow.Top,但是我从哪里得到这些值?

我发现System.Windows.Forms.Screen.PrimaryScreen,显然不是WPF。有WPF替代方案可以给我屏幕分辨率或类似的东西吗?

Answers:


142

把它放在你的窗口构造器中

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

.NET Framework受以下版本支持:4、3.5、3.0

.NET Framework客户端配置文件受以下版本支持:4、3.5 SP1


2
为我工作(.NET 4),我也喜欢WindowStartupLocation.CenterOwner一些子窗口
Stonetip 2012年

默认值为Manual。参考:msdn.microsoft.com/en-us/library/…–
CJBS


49

您仍然可以从WPF应用程序使用Screen类。您只需要从您的应用程序引用System.Windows.Forms程序集。完成之后,(并在下面的示例中引用了System.Drawing):

Rectangle workingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;

...工作正常。

您是否考虑过将主窗口属性WindowStartupLocation设置为CenterScreen?


1
哦...我不知道那个。谢谢。
Marcel B

1
我一直在寻找WindowStartupLocation; 知道我以前看过,非常有用!
chocojosh

@Michael Petrotta谢谢。我应该更经常地查看属性。
meffordm

8

那么PresentationFramework中的SystemParameters类呢?它具有一个WorkArea属性,这似乎是您想要的。

但是,为什么不设置Window.WindowStartupLocation工作呢?CenterScreen是枚举值之一。您是否需要调整对中?


很棒的发现:)至少对我来说中心屏幕的问题是,我的“登录”窗口很小,如果用户在应用程序打开时被点击,它通常会不被注意并进入后台。但是,如果我可以在中央的主显示屏上打开它,则效果很好。注意:大多数用户4+屏幕
米哈尔Ciechan

4个以上的屏幕,请数我!
user7116 2011年

7

您不需要System.Windows.Forms从应用程序引用程序集。相反,您可以使用System.Windows.SystemParameters.WorkArea。相当于System.Windows.Forms.Screen.PrimaryScreen.WorkingArea


2

没有等效的WPF。System.Windows.Forms.Screen仍然是.NET框架的一部分,尽管可以从WPF使用。

有关更多详细信息,请参见此问题,但是您可以通过使用WindowInteropHelper类包装WPF控件来使用与屏幕有关的调用。


2
var window = new MyWindow();

用于屏幕中央:

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

对于父窗口的中心,请使用:

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.