我正在使用 Template10 启动一个新的 Windows 10 通用应用程序。我添加了一个GridView
带有几个项目的项目,这些项目具有Type
另一个Page
要导航到的属性。
我创建了一个新的View
并添加了一个标题,如下所示:
<controls:PageHeader x:Name="PageHeader" Text="Payees">
<!-- place stretched, across top -->
<RelativePanel.AlignTopWithPanel>True</RelativePanel.AlignTopWithPanel>
<RelativePanel.AlignRightWithPanel>True</RelativePanel.AlignRightWithPanel>
<RelativePanel.AlignLeftWithPanel>True</RelativePanel.AlignLeftWithPanel>
<!-- secondary commands -->
<!--<controls:PageHeader.SecondaryCommands>
</controls:PageHeader.SecondaryCommands>-->
</controls:PageHeader>
我已将一个行为附加到ItemClick
如下所示:
public void GridViewItemClick(object sender, object parameter)
{
var arg = parameter as Windows.UI.Xaml.Controls.ItemClickEventArgs;
var item = arg?.ClickedItem as AppPage;
if (item?.TargetPage != null) NavigationService.Navigate(item.TargetPage);
}
导航到新页面可以正常工作,但由于某种原因,标题中没有后退按钮,就像其他页面中一样。如果我切换到使用 shell 后退按钮,那么它将让我从新页面导航回来。
我更改了网格项目以导航到现有的SettingsPage
作为测试,并且后退按钮位于标题中。但是,如果我多次导航到设置页面,它似乎会在后台堆栈上添加一个新实例。例如,我第一次导航时,然后单击一次返回并进入主页。如果我再次进入设置(通过GridView
),然后我点击两次返回主页等。
如果我使用默认的“...”菜单导航到设置页面并转到其中一个设置页面,则返回堆栈的行为与预期相同。我不完全确定我做错了什么,因为这里没有任何花哨的事情发生。
编辑
我已经确定这种行为对于从GridView
. 我创建了一个Button
导航到我新创建的页面的测试,并且后退堆栈按预期运行,除了启用“使用外壳后退按钮”设置时我只会得到一个后退箭头。
以下是 XAML 中附加的行为的样子,如果有帮助的话:
<GridView x:Name="MainGridView"
IsItemClickEnabled="True"
ItemsSource="{Binding AppPages}">
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="ItemClick">
<core:CallMethodAction MethodName="GridViewItemClick" TargetObject="{Binding Mode=OneWay}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
....
</GridView>