首页 文章

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

提问于
浏览
5

我正在尝试制作一个加载全屏的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 回答

  • 10

    根据这个WPF Discussion,设置 WindowStyleWindowState 的顺序很重要 . 你应该在 WindowState 之前设置 WindowStyle

    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;
                    }
                 }
              };
       }
    }
    

相关问题