使用 Xamarin.Forms 的 MenuBar (UWP) 或 Menu (WPF) 的本机视图?

Native view of a MenuBar (UWP) or Menu (WPF) using Xamarin.Forms?

我是 Xamarin.Forms 的新手。我一直在为移动设备和桌面(UWP 和 WPF)编写跨平台应用程序,它们共享相同的 UI,除了一些仅为桌面应用程序呈现的本机控件。 特别是,我想包括一个 MenuBar (UWP) 或一个 Menu (WPF),以使桌面应用程序类似于更传统的应用程序。

我一直在尝试使用 https://docs.microsoft.com/es-es/xamarin/xamarin-forms/platform/native-views/xaml 中的本机视图,但到目前为止没有成功。

我的 XAML 文件的代码是这样的:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
    x:Class="SubclassedNativeControls.SubclassedNativeControlsPage"
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:winControls="clr-namespace:Windows.UI.Xaml.Controls;assembly=Windows, Version=255.255.255.255, Culture=neutral, PublicKeyToken=null, ContentType=WindowsRuntime;targetPlatform=Windows">

    <ContentView x:Name="MenuContent">
        <winControls:MenuBar>
            <winControls:MenuBarItem Title="File">
                <winControls:MenuFlyoutItem Text="New" />
                <winControls:MenuFlyoutItem Text="Open" />
                <winControls:MenuFlyoutItem Text="Edit" />
            </winControls:MenuBarItem>
        </winControls:MenuBar>
    </ContentView>

</ContentPage>

但是随后抛出异常:

Can not set the content of winControls:MenuBarItem as it doesn't have a ContentPropertyAttribute'

我还尝试使用包含 MenuBar 的代码视图访问 MenuBar,并从 C# 端填充它,但是 UWP 应用程序中没有呈现任何内容:

#if WINDOWS_UWP
            // MenuBarItem creation
            MenuBarItem menuBarItem = new MenuBarItem{ Title = "File"};

            menuBarItem.Items.Add(new MenuFlyoutItem(){ Text = "New"});
            menuBarItem.Items.Add(new MenuFlyoutItem(){ Text = "Open"});

            // Access to the menuBar
            var menuContent = (Xamarin.Forms.Platform.UWP.NativeViewWrapper)MenuContent.Content;
            var menubarControl = (Windows.UI.Xaml.Controls.MenuBar)menuContent.NativeElement;

            menubarControl.Items.Add(menuBarItem);
#endif

我知道可以像 Xamarin.Forms: Platform-indepenent application menu 那样使用 menuBars,但由于我也需要 WPF 应用程序(使用 Xamarin.Forms.WPF),本机视图看起来像最有趣的方法。

我认为问题在于,如本 中所述,您不能直接使用菜单栏。您最好创建一个特定于平台的渲染器,然后使用依赖注入将它带到共享项目中,然后像那样使用它。有关详细信息,请参阅 post。