Я новичок во всем этом и в настоящее время пытаюсь получить высоту вкладок в форме страницы с вкладками 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 (вторая ошибка)
Я боролся, наверное, уже несколько недель, мне действительно нужна помощь в настройке этого пользовательского рендеринга. Я понимаю теорию того, что он делает и какова его цель, однако я не совсем понимаю, как компилятор обрабатывает все это и как связать все это вместе. Пожалуйста и спасибо. Извините за длинный вопрос, просто хотел уточнить.
РЕДАКТИРОВАТЬ: это код пользовательского рендерера Android, который находится в Diplomacy.Android.
[assembly: ExportRenderer(typeof(CustomTabbedPage), typeof(MyTabbedPage))]
namespace Diplomacy.Droid.CustomRenderer
{
public class MyTabbedPage : TabbedRenderer
{
public MyTabbedPage(Context context) : base(context)
{
}
}
}