WPF全屏切换仍显示桌面的一部分

时间:2014-12-19 21:24:51

标签: c# wpf

我正在尝试制作一个加载全屏的WPF应用,并让F11键在全屏和窗口之间切换。

使用以下代码,它首先在全屏模式下正确显示在屏幕上。切换将其拉回到常规窗口。

然后随后的切换几乎进入全屏模式,但似乎向上移动了~10像素,因此任务栏的一半是可见的。我能够在一个空主窗口的新WPF项目中重现这一点。

public partial class MainWindow : Window {
    public MainWindow() {
        InitializeComponent();
        this.WindowState = WindowState.Maximized;
        this.WindowStyle = WindowStyle.None;
        this.ResizeMode = ResizeMode.NoResize;
        this.Topmost = true;
        this.PreviewKeyDown +=
            (s, e) => {
                if (e.Key == Key.F11) {
                    if (this.WindowStyle == WindowStyle.None) {
                        this.WindowState = WindowState.Normal;
                        this.WindowStyle = WindowStyle.SingleBorderWindow;
                        this.ResizeMode = ResizeMode.CanResize;
                        this.Topmost = false;
                    } else {
                        this.WindowState = WindowState.Maximized;
                        this.WindowStyle = WindowStyle.None;
                        this.ResizeMode = ResizeMode.NoResize;
                        this.Topmost = true;
                    }
                }
            };
    }
}

这是框架中的错误吗?我无法想象它会被忽视直到现在,但我不知道我做错了什么。这些是应该完成这项工作的属性,而且它们几乎工作但不完全。我已尝试搞乱其他Window设置,但没有运气。有什么想法吗?

1 个答案:

答案 0 :(得分:10)

根据此WPF Discussion,设置WindowStyleWindowState的顺序很重要。您应该在WindowStyle

之前设置WindowState
public partial class MainWindow : Window
{
   public MainWindow()
   {
      InitializeComponent();
      this.ResizeMode = ResizeMode.NoResize;
      this.WindowStyle = WindowStyle.ToolWindow;
      this.WindowState = WindowState.Maximized;
      this.Topmost = true;
      this.PreviewKeyDown +=
          (s, e) =>
          {
             if (e.Key == Key.F11)
             {
                if (this.WindowStyle != WindowStyle.SingleBorderWindow)
                {
                   this.ResizeMode = ResizeMode.CanResize;
                   this.WindowStyle = WindowStyle.SingleBorderWindow;
                   this.WindowState = WindowState.Normal;
                   this.Topmost = false;
                }
                else
                {
                   this.ResizeMode = ResizeMode.NoResize;
                   this.WindowStyle = WindowStyle.ToolWindow;
                   this.WindowState = WindowState.Maximized;
                   this.Topmost = true;
                }
             }
          };
   }
}