我正在尝试制作一个加载全屏的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
设置,但没有运气。有什么想法吗?
答案 0 :(得分:10)
根据此WPF Discussion,设置WindowStyle
和WindowState
的顺序很重要。您应该在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;
}
}
};
}
}