Xamarin.Forms:使用所有页面扩展 CommonToolbarPage class 的方法
Xamarin.Forms: Ways extend CommonToolbarPage class with all pages
我正在开发 ToolbarItem
xamarin forms 应用程序。我需要在整个应用程序中使用 ToolbarItem
。为此,我创建了 CommonToolbarPage
class 并扩展了 ContentPage
以在所有页面中使用。但是 Main.xaml.cs
页面继承了 TabbedPage
。如何在主页上使用 CommonToolbarPage
。
CommonToolbarPage class 代码
下面
public class CommonToolbarPage : ContentPage
{
public CommonToolbarPage()
: base()
{
Init();
}
private void Init()
{
this.ToolbarItems.Add(new ToolbarItem() { Icon="kid", Priority = 0, Order = ToolbarItemOrder.Primary });
this.ToolbarItems.Add(new ToolbarItem() { Text = "License", Priority = 0, Order = ToolbarItemOrder.Primary });
}
}
下面是Mainpage.xaml.cs
class
public partial class MainPage : TabbedPage
{
public MainPage()
{
InitializeComponent();
}
}
Mainpage.xaml这里看Mykid
<?xml version="1.0" encoding="utf-8" ?>
<CustomPages:CommonToolbarPage2 xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TabbedApp.MainPage"
xmlns:CustomPages="clr-namespace:TabbedApp.CustomPages;assembly=TabbedApp"
xmlns:local="clr-namespace:TabbedApp">
<local:DairyTabs Icon="dairy" HeightRequest="10" WidthRequest="10" ></local:DairyTabs>
<local:Mykid Icon="kid" ></local:Mykid>
<local:Event Icon="about"></local:Event>
</CustomPages:CommonToolbarPage2>
如何将 CommonToolbarPage 与 Main.xaml.cs 页面一起使用
public partial class MainPage : CommonToolbarPage2
{
public MainPage()
{
InitializeComponent();
}
}
DiaryTab.xaml.cs(第一个标签第一页)
namespace TabbedApp
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class DairyTabs : ContentPage
{
public DairyTabs()
{
InitializeComponent();
btnDemo.Clicked += delegate
{
CreateTabs();
};
}
private async void CreateTabs()
{
TabbedPage tp = new TabbedPage();
tp.Children.Add(new ChildPage());
tp.Children.Add(new Mykid());
tp.Children.Add(new Event());
await Navigation.PushAsync(tp,false);
}
}
}
当我点击 转到第 2 页 按钮时,在没有 toolbarItem 的情况下输出低于输出(如果我没有继承所有页面文件循环页面)
见下方截图
在 Xamarin 论坛上查看此主题:https://forums.xamarin.com/discussion/97340/create-toolbaritems-using-template-or-some-other-dynamic-mechanism
您的代码似乎完全合法。但是寻找渲染器 TabbedPage
,您不能继承 ContentPage
并将其应用于 TabbedPage`。
您应该为这种页面创建一个新的基础 class:
public class CommonToolbarPage : TabbedPage
{
public CommonToolbarPage()
: base()
{
Init();
}
private void Init()
{
this.ToolbarItems.Add(new ToolbarItem() { Text = "Help", Priority = 0, Order = ToolbarItemOrder.Secondary});
this.ToolbarItems.Add(new ToolbarItem() { Text = "License", Priority = 0, Order = ToolbarItemOrder.Secondary });
this.ToolbarItems.Add(new ToolbarItem() { Text = "About", Priority = 0, Order = ToolbarItemOrder.Secondary });
}
}
如果您使用 MVVM 而不是 CodeBehing 开发方法,您可以 bing 工具栏项 属性,XAML 看起来像这样:
<ContentPage.ToolbarItems>
<ToolbarItem Name="MenuItem1" Order="Primary" Icon="Microsoft.png" Text="Item 1" Priority="0" />
<ToolbarItem Name="MenuItem2" Order="Primary" Icon="Xamarin.png" Text="Item 2" Priority="1" />
</ContentPage.ToolbarItems>
您将拥有一个将在构造函数中创建项目的基本视图模型,而不是静态设置项目。
希望对您有所帮助。
我正在开发 ToolbarItem
xamarin forms 应用程序。我需要在整个应用程序中使用 ToolbarItem
。为此,我创建了 CommonToolbarPage
class 并扩展了 ContentPage
以在所有页面中使用。但是 Main.xaml.cs
页面继承了 TabbedPage
。如何在主页上使用 CommonToolbarPage
。
CommonToolbarPage class 代码
public class CommonToolbarPage : ContentPage
{
public CommonToolbarPage()
: base()
{
Init();
}
private void Init()
{
this.ToolbarItems.Add(new ToolbarItem() { Icon="kid", Priority = 0, Order = ToolbarItemOrder.Primary });
this.ToolbarItems.Add(new ToolbarItem() { Text = "License", Priority = 0, Order = ToolbarItemOrder.Primary });
}
}
下面是Mainpage.xaml.cs
class
public partial class MainPage : TabbedPage
{
public MainPage()
{
InitializeComponent();
}
}
Mainpage.xaml这里看Mykid
<?xml version="1.0" encoding="utf-8" ?>
<CustomPages:CommonToolbarPage2 xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TabbedApp.MainPage"
xmlns:CustomPages="clr-namespace:TabbedApp.CustomPages;assembly=TabbedApp"
xmlns:local="clr-namespace:TabbedApp">
<local:DairyTabs Icon="dairy" HeightRequest="10" WidthRequest="10" ></local:DairyTabs>
<local:Mykid Icon="kid" ></local:Mykid>
<local:Event Icon="about"></local:Event>
</CustomPages:CommonToolbarPage2>
如何将 CommonToolbarPage 与 Main.xaml.cs 页面一起使用
public partial class MainPage : CommonToolbarPage2
{
public MainPage()
{
InitializeComponent();
}
}
DiaryTab.xaml.cs(第一个标签第一页)
namespace TabbedApp
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class DairyTabs : ContentPage
{
public DairyTabs()
{
InitializeComponent();
btnDemo.Clicked += delegate
{
CreateTabs();
};
}
private async void CreateTabs()
{
TabbedPage tp = new TabbedPage();
tp.Children.Add(new ChildPage());
tp.Children.Add(new Mykid());
tp.Children.Add(new Event());
await Navigation.PushAsync(tp,false);
}
}
}
当我点击 转到第 2 页 按钮时,在没有 toolbarItem 的情况下输出低于输出(如果我没有继承所有页面文件循环页面) 见下方截图
在 Xamarin 论坛上查看此主题:https://forums.xamarin.com/discussion/97340/create-toolbaritems-using-template-or-some-other-dynamic-mechanism
您的代码似乎完全合法。但是寻找渲染器 TabbedPage
,您不能继承 ContentPage
并将其应用于 TabbedPage`。
您应该为这种页面创建一个新的基础 class:
public class CommonToolbarPage : TabbedPage
{
public CommonToolbarPage()
: base()
{
Init();
}
private void Init()
{
this.ToolbarItems.Add(new ToolbarItem() { Text = "Help", Priority = 0, Order = ToolbarItemOrder.Secondary});
this.ToolbarItems.Add(new ToolbarItem() { Text = "License", Priority = 0, Order = ToolbarItemOrder.Secondary });
this.ToolbarItems.Add(new ToolbarItem() { Text = "About", Priority = 0, Order = ToolbarItemOrder.Secondary });
}
}
如果您使用 MVVM 而不是 CodeBehing 开发方法,您可以 bing 工具栏项 属性,XAML 看起来像这样:
<ContentPage.ToolbarItems>
<ToolbarItem Name="MenuItem1" Order="Primary" Icon="Microsoft.png" Text="Item 1" Priority="0" />
<ToolbarItem Name="MenuItem2" Order="Primary" Icon="Xamarin.png" Text="Item 2" Priority="1" />
</ContentPage.ToolbarItems>
您将拥有一个将在构造函数中创建项目的基本视图模型,而不是静态设置项目。
希望对您有所帮助。