WinUI3 C++ Frame页面导航重叠问题排查求助
WinUI3 C++页面导航重叠问题解决
问题原因:
你在Page1按钮点击时调用的MainFrame(),并没有指向主窗口里那个命名为MainFrame的Frame实例,而是意外创建了一个新的Frame对象。这个新Frame会默认叠加在原有MainFrame上方,导致原MainFrame中的Page1和新Frame中的Page2同时显示,出现重叠。
解决方案:
方法1:使用Page自带的Frame属性(推荐)
每个Page都自带Frame()属性,它指向的就是承载当前Page的主窗口Frame(即MainFrame)。直接修改Page1的按钮点击代码:
Frame().Navigate(winrt::xaml_typename<Page2>());
这样导航会直接替换当前Page1为Page2,不会出现重叠。
方法2:传递主Frame引用到Page1
- 在MainWindow初始化导航时,把MainFrame作为参数传递给Page1:
MainFrame().Navigate(winrt::xaml_typename<Page1>(), MainFrame());
- 在Page1中重写
OnNavigatedTo方法,保存主Frame引用:
// 先在Page1类中声明成员变量 winrt::Windows::UI::Xaml::Controls::Frame m_mainFrame; void Page1::OnNavigatedTo(winrt::Windows::UI::Xaml::Navigation::NavigationEventArgs const& e) { m_mainFrame = e.Parameter().as<winrt::Windows::UI::Xaml::Controls::Frame>(); }
- 按钮点击时使用保存的引用导航:
m_mainFrame.Navigate(winrt::xaml_typename<Page2>());
内容的提问来源于stack exchange,提问作者yonutix
相关产品推荐
相关产品推荐

