WPF最大化窗口大于屏幕

时间:2015-04-01 12:38:20

标签: c# wpf .net-4.5

使用AllowsTransparency="True" WindowStyle="None"创建WPF窗口并通过this.WindowState = WindowState.Maximized;最大化时,窗口会比我的屏幕大。

设置AllowTransparency="False"时我的窗口周围有边框,但窗口不会比我的屏幕大。
在我的情况下,我有一个1920x1080的屏幕,窗口变为1934x1094 在我的1280x1024屏幕上,窗口将变为1294x1038 无论是否启用AllowTransparency,窗口仍然会变得如此大,但如果禁用它,它将正常工作。

在最大化doesen工作之前设置AllowTransparency并抛出InvalidOperationException。

如何在没有Windows风格边框的情况下获取WPF窗口,但还是要正确最大化?

5 个答案:

答案 0 :(得分:2)

这似乎是一个非常普遍的问题。您似乎必须将高度和宽度绑定到屏幕的实际高度/宽度,如此StackOverflow帖子中所述:

Borderless window application takes up more space than my screen resolution

我希望能解决你所面临的问题。

答案 1 :(得分:0)

设置窗口的此属性。

 MinHeight="100"
  MinWidth="100"
  Height="auto"
  Width="auto" 

希望这会起作用

答案 2 :(得分:0)

参加聚会晚了几年,但只需增加您的this.borderthickness即可参加SizeChanged事件,如下所示:

<Window x:Class="MyApp.MainWindow"
    ResizeMode="CanResize" 
    WindowStyle="SingleBorderWindow"
    SizeChanged="Window_SizeChanged">
....
Code
....
</Window>


public void Window_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        if (this.WindowState == WindowState.Maximized)
        {
            this.BorderThickness = new System.Windows.Thickness(8);
        }
        else
        {
            this.BorderThickness = new System.Windows.Thickness(0);
        }
    }

答案 3 :(得分:0)

如果您只关心窗口的正确尺寸并且外观没有问题,则可以将窗口的内容包装在System.Windows.Controls.Canvas中,如下所示:

<Canvas Name="MyCanvas" Width="auto" Height="auto">
...
</Canvas>

然后,您可以使用MyCanvas.ActualWidthMyCanvas.ActualHeight来获得当前屏幕的分辨率,同时考虑DPI设置并以设备独立单位为单位。 它不会像最大化窗口本身那样增加任何边距。 它也应该可以在多台显示器上使用。

(Canvas接受UIElement作为孩子,因此您应该可以将其与任何内容一起使用。)

答案 4 :(得分:0)

不幸的是,除了创建一个WindowStyle="None"窗口而不调整大小并自己处理所有事情之外,没有其他好的解决方案。这意味着您自己的最大化/最小化/还原按钮可将窗口尺寸设置为适合屏幕大小。您自己的实时字幕区域可供拖动。您自己的边界与适当的光标。您自己的双击处理程序可以最大化/恢复。您自己的例程,用于对照屏幕高度检查鼠标位置,以进行拖到停靠。等等,您明白了。这是一个痛苦的瓶颈,但是如果您至少执行一次,那么将来的所有项目都将使用它。不幸的是,您会丢失“ Aero”动画,但是可惜。

我也想指出这个问题非常重要的一个原因。至少在某些情况下,当窗口跨越两个监视器时,WPF无法充分利用加速图形(因为在最大化窗口时,它们通常会这样做)。这意味着窗口最大化时,D3DImage以及任何Effect的性能都会受到影响。对于我和我的许多用户而言,这都是正在发生的事情,这引起了我对这个问题的注意。