使用 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。
我是 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),本机视图看起来像最有趣的方法。
我认为问题在于,如本