【问题标题】:Setting UWP NavigationView Content To Page Displays Page's Type Name将 UWP NavigationView 内容设置为页面显示页面的类型名称
【发布时间】:2020-07-09 03:18:36
【问题描述】:

我正在使用 XAML Islands 在 .NET Core WPF 应用程序窗口中显示 UWP NavigationView 控件(我不需要整个导航基础结构——我只需要导航视图控件)。我还有一个派生自Page 的类,名为Home,我想用它来显示控件框架中的内容。当我将框架的内容设置为Home 类的对象时,我在框架的内容中看到Home 对象的类型名称,就好像在对象上调用ToString() 而不是渲染其内容。我错过了什么?

using System.Windows;
using MyApp.Wpf.Pages;
using Windows.UI.Xaml.Controls;

namespace MyApp.Wpf
{
    public partial class MainWindow : Window
    {
        private Frame navigationFrame;

        public MainWindow()
        {
            InitializeComponent();
            uwpNavigationView.ChildChanged += uwpNavigationView_ChildChanged;
        }

        private void uwpNavigationView_ChildChanged(object sender, System.EventArgs e)
        {
            if (uwpNavigationView.Child is NavigationView navigationView)
            {
                var homeItem = new NavigationViewItem()
                {
                    Content = "Home",
                    Icon = new FontIcon()
                    {
                        Glyph = "\uE80F",
                    }
                };
                navigationView.MenuItems.Add(homeItem);
                navigationFrame = new Frame();
                navigationView.Content = navigationFrame;
                navigationView.SelectionChanged += NavigationView_SelectionChanged;
            }
        }

        private void NavigationView_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args)
        {
            if(args.SelectedItem is NavigationViewItem item)
            {
                var homePage = new Home();
                navigationFrame.Content = homePage; // homepage.ToString() rendered here?
            }
        }
    }
}

【问题讨论】:

    标签: wpf uwp frame navigationview xaml-islands


    【解决方案1】:

    UWP Windows.UI.Xaml.Controls.Frame 无法呈现 WPF System.Windows.Controls.Page 元素。

    您应该将 Content 属性设置为 UWP Windows.UI.Xaml.Controls.Page 或使用 WPF System.Windows.Controls.Frame

    【讨论】:

    • 不幸的是,在我加载 Home() 页面作为框架内容之前和之后,使用 WPF System.Windows.Controls.Frame 将文本 "System.Windows.Controls.Frame" 放入框架中。 @mm8 我可以看到InitializeComponent() 在派生自System.Windows.Controls.PageHome 构造函数中被调用,因此Home() 对象似乎正在正确加载。我只是不认为它会进入视觉树。
    • @JeffFerguson:嗯……你读过我的回答吗?不能在 UWP 框架中显示 WPF 页面。无法渲染。
    • 我做到了,对于造成的混乱,我深表歉意。作为补救措施,我根据您的建议将Frame 更改为System.Windows.Controls.Frame,以便我使用的是WPF 框架而不是UWP 框架。不幸的是,这给了我上面提到的结果。此时,我有一个 .NET Core WPF 应用程序、一个带有 XAML 岛的 UWP navigationView、一个 WPF 框架和一个 WPF 页面。
    • @JeffFerguson:您仍然不能在 XAML 岛内使用 WPF 元素,例如框架或页面。
    • 我明白了。换句话说,一旦我从可视化树中的 XAML 岛开始,所有子级都需要从那里开始向下遍历树的该部分的所有后代都是 UWP。
    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 2020-01-29
    • 1970-01-01
    • 2017-11-15
    • 2011-04-16
    • 2019-06-25
    • 1970-01-01
    • 2018-04-19
    相关资源
    最近更新 更多