C# · 12月 26, 2021

c# – WPF全屏最大化

我基本上想要让我的 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最大化方面没有明显变差.但你的里程可能会有所不同!