AllowTransparency使过扫描最大化

问题描述 投票:5回答:2

我目前正在制作使用WPF的媒体播放器,并遇到了一个问题。

我希望布局没有常规的窗口边框和阴影。我通过设置WindowStyle = none和AllowTransparency = true来完成此操作。这一切都很有效,只要我不想在全屏使用它。一旦我尝试将WindowState设置为最大化,它就像疯了一样过度扫描(它会切断所有边缘)。这显然是由AllowTransparency = true部分引起的。如果我将其设置为false,则最大化部分按预期工作。不幸的是,一旦应用程序启动,我就无法设置AllowTransparency。我可以通过使用边框并调整边距来弥补这一点,但它看起来并不正确,我不确定它是否适用于不同的分辨率。

总结一下:

  • 使用AllowTransparency = true可以使WindowState最大化工作正常吗?
  • 或者是否有另一种方法可以使窗口没有正常的窗口边框而不设置AllowTransparency = true
  • 或者是否有更好的方法使应用程序全屏?

有没有人有解决方案或想法来实现这一目标?

c# wpf xaml fullscreen maximize
2个回答
2
投票

你在MSDN论坛上发布了答案,但不是在这里,所以这里是;

解决方案是在进入全屏时设置ResizeMode = NoResize。似乎AllowTransparency = True仍然具有来自窗口的常规边框,但只是隐藏它,所以当你最大化它时会尝试补偿该边框。但是如果你改变ResizeMode,边界就会消失。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/0b938537-c048-4122-8a2f-29d04d21f2df/allowtransparency-in-fullscreen?forum=wpf


1
投票

我的解决方案适用于:

AllowsTransparency = “真”

WindowStyle = “无”

您无法设置最大化,因为它会全屏显示。

if (window.Tag == null){

    window.Tag = window.Width + ";" + window.Height + ";" + window.Left + ";" +
                 window.Top;
    window.Width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;
    window.Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;
    window.Left = 0;
    window.Top = 0;
    window.WindowState = WindowState.Normal;

} else {

    List<int> sizes = new List<int>(window.Tag.ToString().Split(';').Select(int.Parse));
    window.Width = sizes[0];
    window.Height = sizes[1];
    window.Left = sizes[2];
    window.Top = sizes[3];
    window.Tag = null;
}
© www.soinside.com 2019 - 2024. All rights reserved.