奇怪的返回堆栈行为

Odd Back Stack Behavior

我正在使用 Template10 开始一个新的 Windows 10 通用应用程序。我添加了一个 GridView 和几个项目,其中有一个 属性 另一个 PageType 可以导航到。

我创建了一个新的 View 并且刚刚添加了一个 header,像这样:

<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);
}

导航到新页面工作正常,但由于某些原因,header 中没有像其他页面中那样的后退按钮。如果我切换到使用 shell 后退按钮,它会让我从新页面返回。

作为测试,我更改了一个网格项目以导航到现有 SettingsPage,后退按钮位于 header 中。但是,如果我多次导航到设置页面,它似乎会在返回堆栈上添加一个新实例。例如,我第一次导航,然后单击返回一次,我就在主页上。如果我再次进入设置(通过GridView),然后我点击两次返回主页等

如果我使用默认的“...”菜单导航到设置页面并转到其中一个设置页面,则返回堆栈会按预期运行。我不完全确定我可能做错了什么,因为这里没有发生任何奇怪的事情。

编辑

我确定此行为是从 GridView 导航时所特有的。我创建了一个测试 Button 导航到我新创建的页面并且返回堆栈的行为符合预期,除了如果我启用了 "use shell back 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>

您的页眉中需要框架。

<controls:PageHeader x:Name="PageHeader" 
    Text="Payees" Frame="{x:Bind Frame}" />