奇怪的返回堆栈行为
Odd Back Stack Behavior
我正在使用 Template10 开始一个新的 Windows 10 通用应用程序。我添加了一个 GridView
和几个项目,其中有一个 属性 另一个 Page
的 Type
可以导航到。
我创建了一个新的 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}" />
我正在使用 Template10 开始一个新的 Windows 10 通用应用程序。我添加了一个 GridView
和几个项目,其中有一个 属性 另一个 Page
的 Type
可以导航到。
我创建了一个新的 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}" />