【发布时间】:2011-06-08 11:17:05
【问题描述】:
我想根据用户屏幕的最大宽度/高度动态设置Window 的宽度和高度。如何以编程方式确定这一点?
【问题讨论】:
-
最大化你的窗口是不可接受的吗?
-
@Lazarus:不,不是我要处理的案子。
我想根据用户屏幕的最大宽度/高度动态设置Window 的宽度和高度。如何以编程方式确定这一点?
【问题讨论】:
对于主屏幕:
System.Windows.SystemParameters.PrimaryScreenWidth
System.Windows.SystemParameters.PrimaryScreenHeight
(请注意,还有一些其他与主屏幕相关的属性取决于各种因素,Full* & Maximised*)
虚拟屏幕:
SystemParameters.VirtualScreenWidth
SystemParameters.VirtualScreenHeight
【讨论】:
如果您想要运行程序的监视器的特定尺寸(如果有人运行多个监视器),您也可以使用:
var helper = new WindowInteropHelper(this); //this being the wpf form
var currentScreen = Screen.FromHandle(helper.Handle);
这将返回一个屏幕对象,该对象引用正在运行程序的监视器。从那里您可以使用currentScreen.Bounds.Width / Height 属性(全尺寸)或currentScreen.WorkingArea.Width / Height(减去任务栏等),具体取决于您想要什么。
【讨论】:
使用屏幕对象
Screen.PrimaryScreen.Bounds.Width
【讨论】:
您可以使用SizeChanged 事件
SizeChanged="MyWindow_SizeChanged"
然后在您的事件处理程序中,
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (this.MinWidth > 0 && this.MinHeight > 0)
{
double heightScaleFactor = e.NewSize.Height / this.MinHeight;
double widthScaleFactor = e.NewSize.Width / this.MinWidth;
mainGrid.LayoutTransform = new ScaleTransform(heightScaleFactor, widthScaleFactor);
}
}
其中MainGrid 是MyWindow 中所有内容的容器。
【讨论】:
当从 Ranorex Studio 8.0.1+git.8a3e1a6f 调用时,我无法在 .NET 4.0.30319.42000 和 Windows 10 Enterprise 下使用上述任何解决方案,所以我使用了该行
using WinForms = System.Windows.Forms;
[…]
SetWindowPos(processes[0].MainWindowHandle,
0,
y,
x,
WinForms.SystemInformation.PrimaryMonitorSize.Width,
WinForms.SystemInformation.PrimaryMonitorSize.Height,
SWP.SHOWWINDOW);
【讨论】:
可以获取屏幕的高度和宽度:
int height = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Height;
int width = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Width;
然后将 Window 的 Height 和 Width 属性设置为 Initialization 中的属性。
this.Height = height;
this.Width = width;
用于在 WinForms 或 ASP .NET 中获取屏幕的高度和宽度。没有麻烦,没有大惊小怪,除非你需要在你的项目中引用 System.Windows.Forms 程序集,如果它不是一个 WinForm 项目。
【讨论】: