Полноэкранная кнопка Windows Universal App
В некоторых приложениях в Windows Store есть кнопка полноэкранного просмотра, которая добавляется к кнопке минимизации, максимизации и закрытия в панели заголовка. Эта кнопка похожа на кнопку полноэкранного выхода, которую каждое приложение имеет в панели заголовка, если включен полноэкранный режим. Это системный элемент управления, и если я могу использовать его в своем универсальном приложении С#?
Ответы
Ответ 1
Вам нужно будет использовать метод Window.SetTitleBar
для достижения желаемого поведения. Поэтому вам нужно выполнить несколько шагов:
Сначала включите представление в строку заголовка. Обратите внимание, что вы можете установить только левую часть строки заголовка. Кнопки "Минимизировать", "Максимизировать" и "Закрыть" будут по-прежнему присутствовать:
CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar = true;
После того, как вы установили это, вы вызываете метод Window.SetTitleBar
с помощью UIElement
:
Window.Current.SetTitleBar(myTitleBar);
Где myTitleBar
может выглядеть так:
<Border x:Name="myTitleBar">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<!-- Title -->
<TextBlock Grid.Column="0"
Text="..."/>
<!-- Custom buttons attached to the right side -->
<StackPanel Grid.Column="1"
Orientation="Horizontal">
<Button x:Name="FullScreenButton"/>
<!-- Use U+E740 FullScreen Icon for the button above -->
</StackPanel>
</Grid>
</Border
Расширенное руководство Марко Минервы (в том числе приятное поведение XAML, которое улучшит этот вариант использования), можно найти здесь.
Ответ 2
Я создал FullScreenModeTitleBarBehavior
(вместе с элементом управления FullScreenModeTitle
), который может просто делать то, что вы хотите.
![введите описание изображения здесь]()
Поведение должно быть привязано к вашему основному Page
, и оно позволяет указать цвета переднего плана и фона TitleBar
. Если вам нужно больше цветов, вы можете просто добавить больше свойств в поведение.
Как это работает, поведение будет перемещать Content
из Page
в элемент управления FulScreenModeTitle
, который в основном составляет пользовательский TitleBar
с перемещенным Content
.
// Store the original main page content.
var mainPageContent = _mainPage.Content;
// Clear the content for now.
_mainPage.Content = null;
// Move the content of the main page to our title bar control.
_customTitleBar.SetPageContent(mainPageContent);
// Refill the content with our new title bar control.
_mainPage.Content = _customTitleBar;
Здесь вы можете найти полный исходный код здесь в GitHub. Также обратите внимание, что это решение было вдохновлено этим sample из репозитория Microsoft GitHub.
Некоторые проблемы, которые я нашел до сих пор
Возможно, вы уже заметили разрыв между нашей пользовательской кнопкой полного экрана и кнопкой "Свернуть". К сожалению, вы не можете его уменьшить, потому что это пространство зарезервировано системой (подробнее см. SystemOverlayRightInset
). Если вы перемещаете пользовательскую кнопку ближе, проверка на результат не удастся, что делает ее непривлекательной.
Также я обнаружил, что если вы используете пользовательскую кнопку для выхода из полноэкранного режима, эти три системные кнопки будут дисфункциональными до тех пор, пока вы дважды щелкните по значку TitleBar
, чтобы увеличить экран. Это может быть ошибкой. К счастью, когда экран находится в полноэкранном режиме, кнопка максимизации будет заменена кнопкой полноэкранного выхода, поэтому мы можем просто скрыть нашу пользовательскую кнопку и позволить системе обрабатывать выход.
Ответ 3
Он может различать 3 типа полноэкранного режима
1. Ввод и выход из полноэкранного режима.
2. Реагирование на изменения в полноэкранном режиме.
3. Запуск в полноэкранном режиме.
Вы можете обратиться к этому URL-адресу
https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/FullScreenMode
var view = ApplicationView.GetForCurrentView();
if (view.IsFullScreenMode)
{
view.ExitFullScreenMode();
rootPage.NotifyUser("Exiting full screen mode", NotifyType.StatusMessage);
// The SizeChanged event will be raised when the exit from full screen mode is complete.
}
else
{
if (view.TryEnterFullScreenMode())
{
rootPage.NotifyUser("Entering full screen mode", NotifyType.StatusMessage);
// The SizeChanged event will be raised when the entry to full screen mode is complete.
}
else
{
rootPage.NotifyUser("Failed to enter full screen mode", NotifyType.ErrorMessage);
}
}