1

我正在使用 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>
4

1 回答 1

1

您需要在标题中使用 Frame。

<controls:PageHeader x:Name="PageHeader" 
    Text="Payees" Frame="{x:Bind Frame}" />
于 2016-03-01T21:18:39.027 回答