我基本上想要让我的
WPF窗口进入全屏模式,当按下F11或按下窗口右上角的最大化按钮.
虽然以下功能像一个F11的魅力:
private void Window_KeyDown(object sender,KeyEventArgs e) { if (e.Key == Key.F11) { WindowStyle = WindowStyle.None; WindowState = WindowState.Maximized; ResizeMode = ResizeMode.NoResize; } }
这仍将显示Windows任务栏(使用Windows 7进行测试):
protected override void OnStateChanged(EventArgs e) { if (WindowState == WindowState.Maximized) { WindowStyle = WindowStyle.None; WindowState = WindowState.Maximized; ResizeMode = ResizeMode.NoResize; } base.OnStateChanged(e); }
我在这里缺少什么?或者我可以做得更优雅吗?
解决方法
WPF似乎在最大化时基于WindowStyle决定是全屏还是尊重任务栏.所以一个kludgy但有效的解决方案是将窗口切换回非最大化,设置WindowStyle,然后将窗口重新设置为最大化:
private bool _inStateChange; protected override void OnStateChanged(EventArgs e) { if (WindowState == WindowState.Maximized && !_inStateChange) { _inStateChange = true; WindowState = WindowState.Normal; WindowStyle = WindowStyle.None; WindowState = WindowState.Maximized; ResizeMode = ResizeMode.NoResize; _inStateChange = false; } base.OnStateChanged(e); }
虽然代码显然是丑陋的,但是过渡到正常然后回到最大化似乎并没有使用户体验更糟.在我的展示中,我注意到F11代码和kludge最大化闪烁,但是在kludge最大化方面没有明显变差.但你的里程可能会有所不同!