我遇到了多监视器系统的问题,并最大化了我的无边界WPF C#.NET 4.0窗口。一台显示器为1680x1050(主要),第二台为1920x1080(二级)。当我在主屏幕上最大化我的窗口时 - 没有问题,即使我切换那两个的顺序。但每次我试图在二级屏幕上最大化它时,它被切断到主显示器的大小。我看到窗口大小是合适的,但这不起作用。
获取监视器的大小:
private System.Windows.Forms.Screen GetCurrentScreen()
{
System.Drawing.Point centerPoint = new System.Drawing.Point((int)(Left + Width / 2), (int)(Top + Height / 2));
foreach (System.Windows.Forms.Screen s in System.Windows.Forms.Screen.AllScreens)
{
if (s.Bounds.Contains(centerPoint))
{
return s;
}
}
return null;
}
最大化:
private void Maximize
{
if (this.WindowState == WindowState.Normal)
{
var scr = GetCurrentScreen();
//this.MaxHeight = scr.WorkingArea.Height;
//this.MaxWidth = scr.WorkingArea.Width;
if (scr != null)
{
if (scr.Primary)
{
this.MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;
this.MaxWidth = SystemParameters.MaximizedPrimaryScreenWidth;
}
else
{
this.MaxHeight = double.PositiveInfinity; //even ridiculous values don't work
this.MaxWidth = double.PositiveInfinity;
this.Height = scr.WorkingArea.Height; // correct values of 2nd screen
this.Width = scr.WorkingArea.Width;
}
}
else
{
this.MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;
this.MaxWidth = SystemParameters.MaximizedPrimaryScreenWidth;
}
this.WindowState = WindowState.Maximized;
}
我得到的是: http://imgur.com/ZYzVV9Q,yf7lSfY#1
我想要的: http://imgur.com/ZYzVV9Q,yf7lSfY#0
由于
答案 0 :(得分:2)
上次我必须在辅助屏幕上最大化窗口时,这对我有用:
Screen sTwo = Screen.AllScreens[1];
this.Top = sTwo.Bounds.Top;
this.Left = sTwo.Bounds.Left;
this.Width = sTwo.Bounds.Width;
this.Height = sTwo.Bounds.Height;
确保添加参考
using System.Windows.Forms;
并设置
AllowsTransparency="True"
你的* .xaml 中的
答案 1 :(得分:1)
您的某些代码可能导致此问题,因为我无法在我的两个屏幕上复制它们......它们的大小相同,但如果我将分辨率更改为一个,则应用程序仍能正确地最大化。如果您启动一个新的WPF应用程序,只需添加
WindowState = "Maximized"
到Window声明,你还有同样的问题吗?
答案 2 :(得分:0)
尝试覆盖或更正ArrangeOverride方法:
http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.arrangeoverride.aspx
在派生类中重写时,定位子元素和 确定FrameworkElement派生类的大小
症状很相似。