Why does Page disappears when I move it between frames?(为什么当我在框架之间移动页面时,它会消失?)
问题描述
我有一个带有Main框架的窗口,其中包含一个Page。我还有另一个包含第一页的页面。我想在这两页之间移动。这是第一页:
第二个是:
当我第一次运行这款应用程序时,一切都很正常。但当我返回到第一页,然后又回到第二页时,第二页框架中的第一页消失了:
以下是MainWindow.xaml.cs:
MainWindow.xaml:
CombinedPage.xaml.cs:
CombinedPage.xaml:
所以最后一个问题是-当我在页面之间移动时,为什么第一页消失了?
推荐答案
我最近都在使用安静的Frame
。这是一个非常强大的控件,仅当您想要显示Web内容时才推荐使用。
我强烈建议每个页面/视图使用ContentControl
和DataTemplate
。
请参见本例:C# WPF Navigation Between Pages (Views)。
使用建议的解决方案使导航更加方便。它消除了像你这样的麻烦。此外,您还可以使用更多选项来自定义页面导航,如添加动画。
问题是Frame
实现了特殊的导航流。设置Frame.Source
或Frame.Content
属性不会立即完成导航,即不会立即应用目标Page
值:
(来源:Microsoft Docs: Navigation Overview)
如图所示,设置Frame.Source
或Frame.Content
会导致一系列以LoadCompleted
事件结束的事件。您当前导航到页面的时间太早。
testPage
仍加载在最近的Frame
中,因此无法在下一个Frame
中显示。您的场景的特殊问题是,您希望在不同的Frame
实例中加载相同的Page
实例。由于Page
实例只能呈现一次,因此您必须从最近的Frame
中卸载Page
实例,才能在下一个Frame
中显示它。
要解决问题,您有两个选择:
处理
null
赋值/Frame
重置后的LoadCompleted
事件,并从处理程序设置新的Page
。- 使用优先级至少为
DispatcherPriority.Background
的Dispatcher
在null
分配/Frame
重置后推迟分配。例如:
我建议处理LoadCompleted
事件,因为该行为肯定更具确定性:
这篇关于为什么当我在框架之间移动页面时,它会消失?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!