使用AllowsTransparency="True" WindowStyle="None"
创建WPF窗口并通过this.WindowState = WindowState.Maximized;
最大化时,窗口会比我的屏幕大。
设置AllowTransparency="False"
时我的窗口周围有边框,但窗口不会比我的屏幕大。
在我的情况下,我有一个1920x1080的屏幕,窗口变为1934x1094
在我的1280x1024屏幕上,窗口将变为1294x1038
无论是否启用AllowTransparency,窗口仍然会变得如此大,但如果禁用它,它将正常工作。
在最大化doesen工作之前设置AllowTransparency并抛出InvalidOperationException。
如何在没有Windows风格边框的情况下获取WPF窗口,但还是要正确最大化?
答案 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.ActualWidth
和MyCanvas.ActualHeight
来获得当前屏幕的分辨率,同时考虑DPI设置并以设备独立单位为单位。
它不会像最大化窗口本身那样增加任何边距。
它也应该可以在多台显示器上使用。
(Canvas接受UIElement
作为孩子,因此您应该可以将其与任何内容一起使用。)
答案 4 :(得分:0)
不幸的是,除了创建一个WindowStyle="None"
窗口而不调整大小并自己处理所有事情之外,没有其他好的解决方案。这意味着您自己的最大化/最小化/还原按钮可将窗口尺寸设置为适合屏幕大小。您自己的实时字幕区域可供拖动。您自己的边界与适当的光标。您自己的双击处理程序可以最大化/恢复。您自己的例程,用于对照屏幕高度检查鼠标位置,以进行拖到停靠。等等,您明白了。这是一个痛苦的瓶颈,但是如果您至少执行一次,那么将来的所有项目都将使用它。不幸的是,您会丢失“ Aero”动画,但是可惜。
我也想指出这个问题非常重要的一个原因。至少在某些情况下,当窗口跨越两个监视器时,WPF无法充分利用加速图形(因为在最大化窗口时,它们通常会这样做)。这意味着窗口最大化时,D3DImage
以及任何Effect
的性能都会受到影响。对于我和我的许多用户而言,这都是正在发生的事情,这引起了我对这个问题的注意。