[英]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.