我正在尝试在UWP应用程序的单个页面中使用模板10 HamburgerMenu
控件(与PageHeader
控件一起使用),而不是更典型的应用程序范围的汉堡包菜单托管在shell页面中。
文档没有具体解释如何做到这一点,只是声明“HamburgerMenu是一个XAML控件,因此可以放在应用程序的任何页面中”。
假设此控件与SplitView
的工作方式类似,并使用Template10 HamburgerMenu
演示代码作为起点,我将以下最小实现添加到页面中:
<controls:HamburgerMenu x:Name="Menu">
<controls:HamburgerMenu.PrimaryButtons>
<controls:HamburgerButtonInfo ButtonType="Command">
<StackPanel Orientation="Horizontal">
<SymbolIcon Width="48" Height="48" Symbol="Home" />
<TextBlock Margin="12,0,0,0" VerticalAlignment="Center" Text="Home" />
</StackPanel>
</controls:HamburgerButtonInfo>
</controls:HamburgerMenu.PrimaryButtons>
<controls:HamburgerMenu.Content>
<TextBlock>Sample Text</TextBlock>
</controls:HamburgerMenu.Content>
</controls:HamburgerMenu>
这会呈现内容TextBlock
,但不会显示包含的菜单。我已经尝试了所有明显的HamburgerMenu
属性,包括HamburgerButtonVisibility
,DisplayMode
,IsOpen
,IsFullScreen
,但没有任何内容使菜单可见。
有人可以指点我在一个页面上同时包含HamburgerMenu
和PageHeader
控件的示例吗?
答案 0 :(得分:1)
从评论中可以理解,您对汉堡包模板基于shell
的方法没有任何问题。你想做的就是,
仅在一个页面显示汉堡菜单,而在其他页面上只显示汉堡菜单,以避免用户直接导航。
所以来到解决方案,Hamburger Control
中的Template10
附带了一个属性IsFullScreen
。将其设置为true,如:
Shell.Instance.HamburgerMenu.IsFullScreen="true";
这会隐藏你的汉堡包菜单。
有两种方法可以解决这个问题。我将首先提出可以完成的解决方案,但我不会推荐它。
Shell.xaml.cs
(这是美丽的),因为它有一个静态的单例实例。您可以在要显示菜单的IsFullScreen="false"
的{{1}}和OnNavigatedTo
覆盖方法中更改OnNavigatingFrom
属性,并在shell中将其保留为默认值true。或者vis-ver default设置为true,您可以在导航并导航到页面时将其设置为false。Page
应用使用的settingsService
(另一项惊人功能)。 Template10
负责settingsService
,AppTheme
,HamburgerMenu IsFullScreen state
以及using the shell back button or the page header one
和Cache duration
按钮。 原因:我之所以使用设置服务的单例实例而不是Shell的实例,是因为我希望我的所有应用设置都转到中间人身上执行操作。所以明天,如果我计划根据值更改某些功能,我将只需编辑settingsService,而不是搜索整个应用程序,以便我在何处更新此属性。
你是怎么做到的?
要遵循第二种方法并将默认值保持为假,我首先要开始:
Hiding the HamburgerMenu
并将属性Shell.xaml
添加到代码行IsFullScreen="True"
现在我将转到我想要显示汉堡菜单的页面(假设它是<Controls:HamburgerMenu x:Name="MyHamburgerMenu">
),所以我转到detailsPage
并在代码隐藏中覆盖了detailsPage
和OnNavigatingFrom
方法如下:
OnNavigateTo
这可以胜任。请注意:我正在使用第二种方法。您也可以选择第一种方法。
请注意:
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) { Services.SettingsServices.SettingsService.Instance.IsFullScreen = true; base.OnNavigatingFrom(e); } protected override void OnNavigatedTo(NavigationEventArgs e) { Services.SettingsServices.SettingsService.Instance.IsFullScreen = false; base.OnNavigatedTo(e); }
会隐藏IsFullScreen="true"
,HamburgerMenu
会显示HamburgerMenu。