繁体   English   中英

UWP 框架 BackStack

[英]UWP Frame BackStack

我在 UWP 中的 Frame 导航有问题。

我在 MainPage.xaml 中定义了一个框架(第 1 帧),并且此框架只会加载一个页面(第 1 页)。 第 1 页还有一个框架(称为 SubPageFrame,已折叠)和一些其他内容(BasicContent,可见)。 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
}

但是这个操作意味着 Page 1-1 仍然保留在 SubPageFrame 中。 当我再次使用 SubPageFrame 时,它​​的BackStack将包含 Page 1-1 和新的 Page。 可以预见,每次要返回BasicContent,无论是否调用了Page 1-1,都必须返回Page 1-1。

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

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

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

我找不到任何方法来做到这一点。

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

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

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

例如像这样:

<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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM