WinUI 3.0 桌面 - C# 页面导航

2023-12-20

我正在尝试进行简单的页面导航,但无法找到有关如何在 WinUI 3.0 中执行此操作的任何文档。

目前,当我使用 WinUI 3.0 创建空白应用程序时,我在 App.xaml.cs 中创建了以下代码

    protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
    {
        m_window = new MainWindow();
        m_window.Activate();
    }

    private Window m_window;

虽然我在网上找到了许多其他示例,但根框架是在上面的 OnLaunched 事件中定义的。

我如何定义 MainWindow.xaml 或 App.xaml 以便获得一个可以在 Page1.xaml 和 Page2.xaml 之间自由切换的框架?

编辑: 我现在发现我可以通过调用来检索框架:

    protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
    {
        m_window = new MainWindow();
        Frame rootFrame = m_window.Content as Frame;
        m_window.Activate();
        rootFrame.Navigate(typeof(UI.MainMenu));
    }

但导航失败并显示System.NullReferenceException: 'Object reference not set to an instance of an object.'错误。我做错了什么:S?


也许最好的方法是创建一个Frame对象并将其分配给m_window,而不是有一个专用的 XAML 窗口。我认为你可以简单地这样做:

this.m_window = new Window();
this.m_window.Content = rootFrame = new Frame(); ;
this.m_window.Activate();
rootFrame.Navigate(typeof(MainPage));

您需要重命名MainWindow to MainPage并将其根元素类型更改为Page.

In your App类,你可以暴露一个公共Navigate委托给的方法rootFrame's Navigate。这样做,您将能够使用App.Current从应用程序中的任何位置获取应用程序实例,从而导致应用程序的根框架在返回堆栈中向前导航。

或者,制作一个类似 Prism 的导航服务,在整个应用程序中提供导航服务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WinUI 3.0 桌面 - C# 页面导航 的相关文章

随机推荐