C# 超宽带帧背向
我对UWP中的帧导航有问题 我在MainPage.xaml中定义了一个框架(框架1),该框架只加载一个页面(页面1)。第1页还有一个框架(称为子页面框架,折叠)和一些其他内容(基本内容,可见)。子页面框架可以按以下顺序导航页面: 第1-1页->第1-2页->第1-3页->…->GoBack()->…->第1-1页 以下是XAML的一部分: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
<!-- 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;
}
}