Собственный вид MenuBar (UWP) или Menu (WPF) с использованием Xamarin.Forms? - PullRequest
1 голос
/ 18 апреля 2020

Я довольно новичок в 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

Я знаю, что возможно использовать строки меню, как в Xamarin.Forms: Меню приложений, не зависящее от платформы , но, поскольку мне тоже требуется приложение WPF (использующее Xamarin.Forms.WPF), родной вид выглядит наиболее интересным.

1 Ответ

0 голосов
/ 22 апреля 2020

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

...