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

что я пропустила? Или я могу сделать это еще элегантнее?

9 ответов


WPF, похоже, принимает решение о том, идти ли в полноэкранном режиме или уважать панель задач на основе 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. Но ваш пробег может варьироваться!


вам нужно установить


другое решение, которое сработало для меня:

для свойства MaxHeight этого окна можно задать значение Объект systemparameters.MaximizedPrimaryScreenHeight с помощью конструктора.

public MainWindow()
{
    InitializeComponent();
    this.MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;
}

предупреждение: это может не работать на расширенном рабочем столе.

источник: развернуть окно с проблемой WindowState (приложение скроет панель задач windows)


попробуй такое

Topmost="True" and WindowState="Maximized"

вы можете видеть, что ваше окно будет охватывать весь экран и скрывать все с помощью панели задач windows


Если есть еще кто-то, кому нужен гладкий полный экран, конечно, протестирован только на windows 10! В Windows 10 minimized сделайте меньше мерцания, если вы поддерживаете этот порядок кода!

    public bool IsFullscreen = false;
    public WindowState lastWindowState;
    private void player_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        if (IsFullscreen)
        {
            this.WindowStyle = WindowStyle.SingleBorderWindow;
            this.WindowState = lastWindowState;
            IsFullscreen = false;

        }
        else
        {
            lastWindowState = this.WindowState;

            this.WindowStyle = WindowStyle.None;
            if (this.WindowState == WindowState.Maximized)
                this.WindowState = WindowState.Minimized;
            this.WindowState = WindowState.Maximized;
            IsFullscreen = true;
        }
    }

Если вы используете WindowChrome чтобы создать пользовательский интерфейс chrome, вам нужно установить GlassFrameThickness к чему-то, кроме 0 (по крайней мере, это было последнее, что мне нужно было сделать, чтобы Панель задач была скрыта за окном). Это в дополнение к шагам, предусмотренным в принятом ответе.


вы можете скрыть панель задач при импорте user32.файл DLL...

[DllImport("user32.dll")]
private static extern int FindWindow(string className, string windowText);
[DllImport("user32.dll")]
private static extern int ShowWindow(int hwnd, int command);

private const int SW_HIDE = 0;
private const int SW_SHOW = 1;

использование:

int hwnd = FindWindow("Shell_TrayWnd","");
ShowWindow(hwnd,SW_HIDE);

Я нашел простой способ достичь полноэкранного режима в WPF:

    private double LastHeight, LastWidth;
    private System.Windows.WindowState LastState;

    private void Window_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.F11)
        {
            if (WindowStyle != WindowStyle.None)
            {
                LastHeight = Height;
                LastWidth = Width;
                LastState = WindowState;

                Topmost = true;
                Width = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;
                Height = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;
                Top = 0;
                Left = 0;
                WindowState = System.Windows.WindowState.Normal;
                WindowStyle = WindowStyle.None;
                ResizeMode = System.Windows.ResizeMode.NoResize;
            }
            else
            {
                WindowStyle = WindowStyle.SingleBorderWindow;
                WindowState = LastState; ;
                ResizeMode = ResizeMode.CanResizeWithGrip;
                Topmost = false;
                Width = LastWidth;
                Height = LastHeight;
            }
        }
    }

Это хорошо работает в Windows 7 с фиксированной панелью задач.


в моем случае минимизация и максимизация сделают полноэкранный размер немного больше, чем экран, поэтому альтернатива, которую я нашел, - временно установить видимость свернутой, а затем вернуться к видимой, чтобы принудительно перерисовать.

Visibility = Visibility.Collapsed;
WindowStyle = WindowStyle.None;
WindowState = WindowState.Maximized;
ResizeMode = ResizeMode.NoResize;
Visibility = Visibility.Visible;