奇怪的后退堆栈行为

本文关键字:堆栈 | 更新日期: 2023-09-27 18:36:40

我正在使用Template10启动一个新的Windows 10通用应用程序。我添加了一个包含几个项目的GridView,这些项目的属性是要导航到的另一个PageType

我创建了一个新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,该测试导航到我新创建的页面,并且后退堆栈的行为符合预期,除了如果我启用了"使用 shell 后退按钮"设置,我只会得到一个后退箭头。

下面是附加的行为在 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}" />