1

我在多显示器系统和最大化我的无边界 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

谢谢

4

3 回答 3

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

于 2013-10-22T12:41:22.750 回答
1

您的某些代码可能会导致此问题,因为我无法在我的两个屏幕上复制它......它们的大小相同,但如果我更改其中一个的分辨率,应用程序仍会正确最大化。如果您启动一个新的 WPF 应用程序并添加

WindowState = "Maximized" 

到Window声明,你还有同样的问题吗?

于 2013-10-22T12:28:28.083 回答
0

尝试覆盖或更正 ArrangeOverride 方法:

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.arrangeoverride.aspx

在派生类中重写时,定位子元素并确定 FrameworkElement 派生类的大小

症状相似。

于 2013-10-22T12:05:20.953 回答