Собственное представление MenuBar (UWP) или Menu (WPF) с использованием Xamarin.Forms?

Я новичок в Xamarin.Forms. Я писал кроссплатформенное приложение для мобильных устройств и настольных компьютеров (UWP и WPF) с одним и тем же пользовательским интерфейсом, за исключением некоторых собственных элементов управления, которые отображаются только для настольного приложения. В частности, я хотел бы включить 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>

Но тогда возникает исключение:

Невозможно установить содержимое winControls: MenuBarItem, поскольку у него нет 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

Я знаю, что можно использовать menuBars, как в Xamarin.Forms: Platform-independent меню приложения, но поскольку мне тоже требуется приложение WPF (с использованием Xamarin.Forms.WPF), родное представление кажется наиболее интересным подходом.


person jagg00    schedule 18.04.2020    source источник


Ответы (1)


Я думаю, что проблема в том, что, как сказано в этом сообщении, вы не можете использовать Menubar напрямую . Вам лучше создать средство визуализации для конкретной платформы и перенести его в общий проект с помощью внедрения зависимостей и использовать его таким образом. См. Сообщение для более подробной информации.

person Emil    schedule 22.04.2020