奇怪的后退堆栈行为
本文关键字:堆栈 | 更新日期: 2023-09-27 18:36:40
我正在使用Template10启动一个新的Windows 10通用应用程序。我添加了一个包含几个项目的GridView
,这些项目的属性是要导航到的另一个Page
的Type
。
我创建了一个新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}" />