将Xamarin Form标签页连接到XAML

时间:2019-02-05 19:40:45

标签: xaml xamarin xamarin.forms custom-renderer tabbedpage

我对所有这些都还很陌生,并且目前正在尝试获取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个错误(第二个错误)

enter image description here

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

编辑: 这是Diplomacy中的Android自定义渲染器代码。Android

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

1 个答案:

答案 0 :(得分:0)

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

您要做的就是在GameTab.xaml.cs中这样做

   public partial class GameTab : Diplomacy.CustomRenderers.CustomTabbedPage