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;