C# 超宽带帧背向

C# 超宽带帧背向,c#,uwp,C#,Uwp,我对UWP中的帧导航有问题 我在MainPage.xaml中定义了一个框架(框架1),该框架只加载一个页面(页面1)。第1页还有一个框架(称为子页面框架,折叠)和一些其他内容(基本内容,可见)。子页面框架可以按以下顺序导航页面: 第1-1页->第1-2页->第1-3页->…->GoBack()->…->第1-1页 以下是XAML的一部分: <!-- This Grid is contained in Page 1. --> <Grid Background="{ThemeRes

我对UWP中的帧导航有问题

我在MainPage.xaml中定义了一个框架(框架1),该框架只加载一个页面(页面1)。第1页还有一个框架(称为子页面框架,折叠)和一些其他内容(基本内容,可见)。子页面框架可以按以下顺序导航页面:

第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页仍保留在子页面框架中。当我再次使用SubPageFrame时,它的
BackStack
将包含第1-1页和新页面。可以预测,每次我想返回基本内容时,无论是否调用了第1-1页,我都必须返回到第1-1页

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

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

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

我找不到任何方法来做这件事

我怎样才能清除框架的背面?SubPageFrame.BackStack.Clear()似乎没有删除通过SubPageFrame.BackStack.Clear()导航的第一页


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

我不确定您想做什么,根据您上次的评论,我与我的同事讨论过,也许您需要的只是在
CanGoBack
为false时将
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)
    {
        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;
    }
}

可能重复,所以当你向前导航到第1-1页时,你想先将基本内容折叠,然后在返回到第1-1页时使其再次可见?@GraceFeng MSFT:当我返回到第1-1页并想返回基本内容时,我看不到基本内容。因此,为了使它可见,我直接折叠框架1-1(它包含第1-1页)。因为BasicContent将使用GoBack()方法刷新,所以我使用此新框架(框架1-1)加载剩余页面(第1-x页)。@ChesterGu,请确认我的问题,是还是否?我不明白你在做什么,或者你可以发布你的xaml代码?或者一些图片来解释你想做什么?@GraceFeng MSFT:不,当我回到第1-1页时,基本内容仍然是折叠的。我已经用XAML代码更新了我的问题。子页面框架(第1-1帧)将加载所有子页面。我想给出一张图片,但我的声誉不够。您的代码与我的代码类似,但
SubPageFrame.Content=null
没有用。@ChesterGu,你可以上传到其他地方,比如OneDrive,然后将uri粘贴到这里。我已经上传了一个到OneDrive的。希望这能让我的问题更清楚。有两个步骤来测试这个问题。第1步之后,第1-1页将存储在子页面框架中,我无法将其删除。@ChesterGu,我终于发现了您的问题,问得好,我更新了返回按钮的答案。请检查一下。如果这解决了你的问题,你能标记这个答案吗?我的逻辑仍然有问题。步骤1只是一个简单的例子。如果在步骤1中有两个或多个页面需要导航,BackButton将直接返回BasicContent并跳过其他页面。
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;
    }
}