You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

  1. 在MainWindow初始化导航时,把MainFrame作为参数传递给Page1:
MainFrame().Navigate(winrt::xaml_typename<Page1>(), MainFrame());
  1. 在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>();
}
  1. 按钮点击时使用保存的引用导航:
m_mainFrame.Navigate(winrt::xaml_typename<Page2>());

内容的提问来源于stack exchange,提问作者yonutix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:12:33