Как добавить динамическую возможность переключения с полноэкранного режима в оконный режим и наоборот на Mahapps MetroWindow?FullscreenBehaviour for Mahapps
Начиная с обычным окном
и после переключения в полноэкранном режиме верхних кнопок правого окна (Свернуть/Развернуть/Закрыть) все еще видны (но они не должны быть видны, а в качестве названия бар). Зарезервированное пространство для заголовка кажется все еще там.
Другой путь круглый первоначально из полноэкранного состояния (нет кнопки, кроме кнопки Hello в середине и не заголовка => как и ожидалось)
... но при возврате в нормальное состояние окна заголовок возвращается снова, но верхние левые кнопки отсутствуют.
я делаю что-то здесь не так в коде? Я использовал страшное поведение. Интересная часть, которая выполняется при переключении заключается в следующем:
private static void OnIsFullscreenChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
var window = (MetroWindow)sender;
var oldValue = (bool)e.OldValue;
var newValue = (bool)e.NewValue;
if (newValue == oldValue || window == null)
{
return;
}
if (newValue)
{
window.Tag = window.WindowState;
window.Topmost = true;
window.UseNoneWindowStyle = true;
window.IgnoreTaskbarOnMaximize = true;
window.ShowTitleBar = false;
window.WindowStyle = WindowStyle.None;
window.WindowState = WindowState.Maximized;
}
else
{
window.Topmost = false;
window.UseNoneWindowStyle = false;
window.IgnoreTaskbarOnMaximize = false;
window.ShowTitleBar = true;
window.WindowStyle = WindowStyle.SingleBorderWindow;
window.WindowState = (WindowState)window.Tag;
}
}
Прикрепление Двойники Поведение в окно по умолчанию WPF контролировать все работает, как ожидалось.
Я придаю Поведение так:
<controls:MetroWindow ... local:FullscreenBehavior.IsFullscreen="{Binding Fullscreen}">
<!-- code above sets initial state depending on ViewModel value -->
<!-- code below fires mode switching when a defined key is pressed => executes OnIsFullscreenChanged method -->
<i:Interaction.Behaviors>
<behaviours:BorderlessWindowBehavior />
<behaviours:WindowsSettingBehaviour />
<behaviours:GlowWindowBehavior />
<modern:FullscreenBehavior FullscreenKey="{Binding FullscreenKey}" />
</i:Interaction.Behaviors>
...
EDIT: Установите состояние окна кнопок явно Когда я расширяю метод, чтобы установить состояния на правильное значение явно, как представляется, еще один странный эффект :
private static void OnIsFullscreenChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
var window = (MetroWindow)sender;
var oldValue = (bool)e.OldValue;
var newValue = (bool)e.NewValue;
if (newValue == oldValue || window == null)
{
return;
}
if (newValue)
{
window.Tag = window.WindowState;
window.Topmost = true;
window.UseNoneWindowStyle = true;
window.IgnoreTaskbarOnMaximize = true;
window.ShowTitleBar = false;
window.ShowCloseButton = false;
window.ShowMaxRestoreButton = false;
window.ShowMinButton = false;
window.WindowStyle = WindowStyle.None;
window.WindowState = WindowState.Maximized;
}
else
{
window.Topmost = false;
window.UseNoneWindowStyle = false;
window.IgnoreTaskbarOnMaximize = false;
window.ShowTitleBar = true;
window.ShowCloseButton = true;
window.ShowMaxRestoreButton = true;
window.ShowMinButton = true;
window.ShowCloseButton = true;
window.ShowMaxRestoreButton = true;
window.WindowStyle = WindowStyle.SingleBorderWindow;
window.WindowState = (WindowState)window.Tag;
}
}
окно получает «иногда» вырезать на границе, а иногда она выглядит (как и в первой картине в верхней части). Также я не знаю (пока), что пространство заголовка больше не сохраняется, когда первоначально начинается с полноэкранного (кажется, есть разница, не знаю почему).
Какова ценность ShowCloseButton, ShowMaxRestoreButton, свойств ShowMinButton? –
@FDL: Я не задал их явно. Как видите, они отображаются, если я начинаю с обычного окна, но при запуске с полноэкранного режима они скрыты. – Beachwalker
@FDL: Если я установил их в false/hidden ... это также удалит пространство для заголовка? – Beachwalker