我在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导航的第一页。
或者我的代码有更好的解决方案吗?
答案 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;
}
}