将 Xamarin 表单标签页连接到 XAML

Connecting Xamarin Form tabbed pages to XAML

我对这一切还很陌生,目前正在尝试获取 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 中遇到了各种错误,在试图推送 GameTab 的导航页面中遇到了 1 个错误(第二个错误)

我可能已经苦苦挣扎了几个星期了,我真的需要一些关于如何设置这个自定义渲染的帮助。我了解它的作用及其目的的理论,但是我不完全理解编译器如何处理这一切,以及如何 link 它们一起。谢谢,麻烦您了。很抱歉问了这么长的问题,我只是想说得透彻一点。

编辑: 这是位于 Diplomacy.Android

中的 Android 自定义渲染器代码
[assembly: ExportRenderer(typeof(CustomTabbedPage), typeof(MyTabbedPage))]
namespace Diplomacy.Droid.CustomRenderer
{
    public class MyTabbedPage : TabbedRenderer
    {
        public MyTabbedPage(Context context) : base(context)
        {
        }
    }
}

你得到的所有错误都是出于一个原因,即你的部分 class 的另一部分,即 GameTab.xaml.cs 文件 GameTab class 不是从你的 CustomTabbedPage 继承的,而是你的 Xamarin.Forms.TabbedPage

您所要做的就是在 GameTab.xaml.cs

   public partial class GameTab : Diplomacy.CustomRenderers.CustomTabbedPage