Подключение страниц с вкладками Xamarin Form к XAML - PullRequest
0 голосов
/ 05 февраля 2019

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

После нескольких дней борьбы мне удалось добраться до этого места (надеюсь, направильный путь), однако я просто не могу понять, как подключить XAML к моей странице с вкладками.Это то, что у меня есть.

GameTab.xaml

<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage 
            xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            x:Class="Diplomacy.Views.GameTab"
            xmlns:pages="clr-namespace:Diplomacy.Views"
            xmlns:custom="clr-namespace:Diplomacy.CustomRenderers">
    <!--Pages can be added as references or inline-->

    <TabbedPage.Children>
        <pages:TabbedMap            Title="Map"         Icon="tank.png"/>
        <pages:TabbedChat           Title="Chat"        Icon="chat.png"/>
    </TabbedPage.Children>
</TabbedPage>

GameTab.xaml.cs

namespace Diplomacy.Views
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class GameTab : Xamarin.Forms.TabbedPage
    {
        SelectionGamesViewModel viewModel;

        public GameTab(SelectionGamesViewModel viewModel)
        {
            InitializeComponent();

            // Disables switching between tabs with the swipe gesture
            On<Xamarin.Forms.PlatformConfiguration.Android>().DisableSwipePaging();

            // Sets the tab at the bottom in android phones
            On<Xamarin.Forms.PlatformConfiguration.Android>().SetToolbarPlacement(ToolbarPlacement.Bottom);

            BindingContext = this.viewModel = viewModel;
        }
    }

MyCustomRenderer.cs

namespace Diplomacy.CustomRenderers
{
    public class CustomTabbedPage : Xamarin.Forms.TabbedPage
    {
    }
}

На этом этапе мой следующий шаг - использовать CustomTabbedPage (поправьте меня, если я не прав с этого момента).

С этой строкой: xmlns:custom="clr-namespace:Diplomacy.CustomRenderers" Я смогу втиснуть себя в форму страницы с вкладками Xamarin с помощью своего пользовательского рендера, который в настоящее время ничего не делает.

Способ, которым я верю, что это сделанопутем изменения TabbedPage на CustomTabbedPage, как показано ниже

<?xml version="1.0" encoding="utf-8" ?>
<custom:CustomTabbedPage 
            xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            x:Class="Diplomacy.Views.GameTab"
            xmlns:pages="clr-namespace:Diplomacy.Views"
            xmlns:custom="clr-namespace:Diplomacy.CustomRenderers">
    <!--Pages can be added as references or inline-->
.
. // Same stuff goes here
.

</custom:CustomTabbedPage>

Однако, когда я это делаю, я получаю всевозможные ошибки в GameTab.xaml.cs и 1 ошибку на странице навигации, пытающейся нажатьGameTab (2-я ошибка)

enter image description here

Я боролся, наверное, уже несколько недель, мне очень нужна помощь в настройке этого пользовательского рендера,Я получил теорию о том, что он делает и какова его цель, однако я не до конца понимаю, как компилятор все это обрабатывает, и как связать все это вместе.Пожалуйста и спасибо.Извините за длинный вопрос, я просто хотел быть тщательным.

РЕДАКТИРОВАТЬ: Это пользовательский код рендерера Android, который живет в Diplomacy. Android

[assembly: ExportRenderer(typeof(CustomTabbedPage), typeof(MyTabbedPage))]
namespace Diplomacy.Droid.CustomRenderer
{
    public class MyTabbedPage : TabbedRenderer
    {
        public MyTabbedPage(Context context) : base(context)
        {
        }
    }
}

1 Ответ

0 голосов
/ 05 февраля 2019

Все ошибки, которые вы получаете, по одной и той же причине, что другая часть вашего частичного класса, то есть файлы GameTab.xaml.cs, класс GameTab наследует не от CustomTabbedPage, а от вашего Xamarin.Forms.TabbedPage

Все, что вам нужно сделать, это что-то вроде этого в вашем GameTab.xaml.cs

   public partial class GameTab : Diplomacy.CustomRenderers.CustomTabbedPage
...