UWP Frame BackStack

时间:2016-10-04 09:24:29

标签: c# uwp

我在UWP中导航Frame时出现问题。

我在MainPage.xaml中定义了一个框架(第1帧),此框架只会加载一个页面(第1页)。第1页还有一个框架(称为SubPageFrame,折叠)和一些其他内容(BasicContent,visible)。 SubPageFrame可以按此顺序导航页面:

第1-1页 - >第1-2页 - >第1-3页 - > ... - > GoBack() - > ... - >第1-1页

以下是XAML的一部分:

<!-- This Grid is contained in Page 1. -->
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ScrollViewer Name="BasicContentScrollViewer" VerticalScrollBarVisibility="Auto">
        <!-- BasicContent -->
    </ScrollViewer>

    <Frame Name="SubPageFrame" Visibility="Collapsed">
        <!--Page 1-x will be loaded here-->
    </Frame>
</Grid> 

当我导航到第1-1页时,我将折叠ScrollViewer并显示SubPageFrame。当我第一次回到第1-1页时,显然我无法使用SubPageFrame.GoBack()来获取BasicContent。因此,当我想显示BasicContent时,我使用属性CanGoBack检查BackStack

if(SubPageFrame.CanGoBack  == false)
{
    //collapse SubPageFrame
    //display ScrollViewer
}

但是这个操作意味着页面1-1仍然保存在SubPageFrame中。当我再次使用SubPageFrame时,其BackStack将包含第1-1页和新页面。可以预测,每次我想返回BasicContent时,我都必须回到第1-1页,无论我是否打过Page 1-1。

我有两个步骤来测试我的代码,这是描述两个步骤的图片:here

在第1步之后,我仍然在第2步中获得第1-1页,这不是我所期望的。

我的问题是,当我回到第1-1页时,我可以使BasicContent可见(它没问题)并使SubPageFrame返回其初始状态(框架不包含任何页面)。

我无法找到任何方法。

如何清除框架的BackStack? SubPageFrame.BackStack.Clear()似乎没有删除由SubPageFrame导航的第一页。

或者我的代码有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

我不确定你想做什么,并根据你的最后评论,我和我的同事讨论过,也许你需要的只是在Frame时将CanGoBack的内容设置为空是假的?

例如:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ScrollViewer Name="BasicContentScrollViewer" VerticalScrollBarVisibility="Auto">
        <Rectangle Height="3000" Width="3000" Fill="LightBlue" />
    </ScrollViewer>

    <Frame Name="SubPageFrame" Visibility="Collapsed">
        <!--Page 1-x will be loaded here-->
    </Frame>

    <Button Content="Go Back" VerticalAlignment="Bottom" HorizontalAlignment="Left" Click="Back_Button_Click" />
    <Button Content="Go to Page 1-1" VerticalAlignment="Bottom" HorizontalAlignment="Right" Click="Forward_Button_Click" />
</Grid>
代码背后的代码:

private void Back_Button_Click(object sender, RoutedEventArgs e)
{
    if (SubPageFrame.CanGoBack)
        SubPageFrame.GoBack();
    else
    {
        SubPageFrame.Content = null;
        SubPageFrame.Visibility = Visibility.Collapsed;
        BasicContentScrollViewer.Visibility = Visibility.Visible;
    }
}

private void Forward_Button_Click(object sender, RoutedEventArgs e)
{
    SubPageFrame.Navigate(typeof(MainPage));
    BasicContentScrollViewer.Visibility = Visibility.Collapsed;
    SubPageFrame.Visibility = Visibility.Visible;
}

如果仍有问题,请发表评论告诉我们。用于显示您想要的图像会更好。

<强>更新

private void Back_Button_Click(object sender, RoutedEventArgs e)
{
    if (SubPageFrame.CanGoBack)
    {
        var backstack = SubPageFrame.BackStack;
        if (backstack.Count > 1)
        {
            SubPageFrame.GoBack();
        }
        else
        {
            SubPageFrame.BackStack.Clear();
            SubPageFrame.Visibility = Visibility.Collapsed;
            BasicContentScrollViewer.Visibility = Visibility.Visible;
        }
    }
    else
    {
        SubPageFrame.Visibility = Visibility.Collapsed;
        BasicContentScrollViewer.Visibility = Visibility.Visible;
    }
}