Подтвердить что ты не робот

Окно WPF со стилем = Нет закрывает панель задач, когда Максимизировано после инициализации приложения

Я хочу добиться того же эффекта, что и проигрыватели Flash для Windows Media или на основе браузера, которые занимают ПОЛНУЮ (даже панель задач не видна) недвижимость при максимальном увеличении.

Это отлично работает, если для параметра WindowState установлено значение Maximized, а для WindowStyle установлено значение None в XAML, поэтому приложение запускается в этом состоянии. Проблема в том, что я хочу запустить приложение в ограниченном окне и, когда пользователь выбирает, максимизировать, как указано выше. В обработчике StateChanged я проверяю состояние Maximized, и если это так, я устанавливаю WindowStyle в None. Это приводит к максимизации окна, но НЕ закрывает панель задач. Следующий код сделает эту работу так, как я хочу, но ее взломать, и я хочу ее очистить:

if (WindowState == WindowState.Maximized)
{
    m_videoWindow.Maximize();

    WindowStyle = WindowStyle.None;

    //the following makes this work but I would like to clean it up
    Hide();
    Show();
}

EDIT Это (с 2006 года, когда все еще в CTP) упоминает проблему, и кто-то из штатов MS надеется улучшить полноэкранную поддержку в следующей версии, были ли эти улучшения сделаны?

4b9b3361

Ответ 1

В этой статье объясняется все: Максимальное окно (с WindowStyle = None) с учетом панели задач.

Также стоит проверить: Пользовательское окно Chrome в WPF.

Изменить: теперь новая, это библиотека интеграции оболочки WPF, которая позволяет полностью переделать оконный хром без головных болей для переопределения перемещения, изменения размера и т.д.

Изменить 2015. Интеграция библиотеки оболочки теперь интегрирована в WPF, и MS удалила код

Ответ 2

Чтобы это правильно работало в моем приложении WPF/.NET 4.0, я вызываю эту функцию всякий раз, когда я вхожу или выхожу из полноэкранного режима:

private static void RefreshWindowVisibility(Window window)
        {
            if (window.OriginalWindowState == WindowState.Maximized)
            {
                window.Hide();
                window.Show();
                window.BringIntoView();
            }
        }

Существует мерцание, связанное с этим методом, но, похоже, такое же мерцание существует при переходе в полноэкранный режим в Chrome. Internet Explorer, похоже, использует другой подход.

Ответ 3

Я обнаружил, что могу максимизировать до полного экрана (охватывая панель задач), установив свойства при создании окна (в xaml), но не смог переключиться туда и обратно после создания. После некоторых экспериментов я обнаружил, что порядок, заданный свойствами, имеет значение:

public bool IsFullscreen
{
    get 
    {
        return WindowState == System.Windows.WindowState.Maximized
            && ResizeMode == System.Windows.ResizeMode.NoResize
            && WindowStyle== System.Windows.WindowStyle.None;
    }
    set
    {
        if ( value )
        {
            ResizeMode = System.Windows.ResizeMode.NoResize;
            WindowStyle = System.Windows.WindowStyle.None;
            WindowState = System.Windows.WindowState.Maximized;
        }
        else
        {
            ResizeMode = System.Windows.ResizeMode.CanResize;
            WindowStyle = System.Windows.WindowStyle.SingleBorderWindow;
            WindowState = System.Windows.WindowState.Normal;            
        }
    }
}

Обратите внимание, что WindowState приходит последним в установщике.

Ответ 4

Я не знаю, подходит ли это для вас, но вы можете изменить размер окна, чтобы иметь тот же размер, что и рабочая область (то есть, в большинстве случаев, весь экран, кроме панели задач), и найдите его на 0, 0 (верхний левый угол):

Width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width; 
Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height; 
Left = 0; 
Top = 0;

Точное определение свойства WorkingArea (из MSDN):

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

Надеюсь, что это поможет