Полноэкранная кнопка 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);
            }
        }