WPF全屏最大化

Mar*_*erl 9 c# wpf fullscreen

我基本上希望让我的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这仍将显示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);
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?或者我可以做得更优雅吗?

ito*_*son 20

WPF似乎正在决定是否在最大化时基于WindowStyle全屏或尊重任务栏.所以一个有效但有效的解决方案是将窗口切换回非最大化,设置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);
}
Run Code Online (Sandbox Code Playgroud)

虽然代码显然很难看,但转换到Normal然后再转回Maximized似乎并没有让用户体验更糟糕.在我的显示器上,我注意到F11代码和kludge最大化的闪烁,但在kludge最大化上没有明显更糟.但你的里程可能有所不同!

  • *敲敲* - 谁在那里? - 来自'70的信号量.虽然很好,但它确实有用.+1 (5认同)