Windows 应用商店中的某些应用在标题栏中的最小化、最大化和关闭按钮之外还有一个全屏按钮。如果全屏处于活动状态,此按钮看起来类似于每个应用程序在标题栏中的退出全屏按钮。那是系统控件吗?如果我如何在我的 C# 通用应用程序中使用它?
3 回答
您必须使用该Window.SetTitleBar
方法来实现您想要的行为。因此,您需要完成几个步骤:
首先,使视图能够扩展到标题栏。请注意,您只能设置标题栏的左侧部分。Minimize、Maximize和Close按钮仍然存在:
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
可以在这里找到 Marco Minerva 的扩展指南(包括一个很好的 XAML 行为,可以更好地调整这个用例)。
我做了一个FullScreenModeTitleBarBehavior
(连同一个FullScreenModeTitle
控件),它可能只是做你想做的事。
该行为需要附加到您的 main 中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 上找到完整的源代码。另请注意,此解决方案的灵感来自 Microsoft GitHub 存储库中的这个特定示例。
到目前为止我发现的一些问题
您可能已经注意到我们的自定义全屏模式按钮和最小化按钮之间存在差距。不幸的是,您无法进一步减少它,因为系统保留了这么多空间(请查看更多详细信息)。如果您将自定义按钮移得更近,命中测试将失败,使其无法点击。SystemOverlayRightInset
另外我发现如果你使用自定义按钮退出全屏,这三个系统按钮将无法正常工作,直到你双击TitleBar
最大化屏幕。这可能是一个错误。幸运的是,当屏幕处于全屏模式时,最大化按钮将被替换为退出全屏按钮,因此我们可以隐藏自定义按钮,让系统处理退出。
它可以区分为 3 种全屏模式 1. 进入和退出全屏模式。2.响应全屏模式的变化。3. 以全屏模式启动。
您可以参考这个网址 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);
}
}