将 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
我对这一切还很陌生,目前正在尝试获取 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