使用Xamarin Forms在每个页面上显示不同的工具栏按钮
我的Xamarin Forms应用程序中有2个页面。我的第一页在工具栏中有4个图标。我的第二页是登录页面,在工具栏中有一个勾号和一个十字。使用Xamarin Forms在每个页面上显示不同的工具栏按钮
我无法让登录页面显示任何图标,除非我将其设置为导航页面。在调用PushAsync()之前,我还必须在第一页上清除ToolBarItems,否则它会抱怨工具栏项太多。
如果我在登录页面上调用PopAsync(),它不会返回到第一页。我猜这是由于他们是2个导航页面。我也尝试过PopToRootAsync(),但后退按钮可以工作。
我的问题是 - 如何以允许导航工作的方式在2个不同页面上显示不同的工具栏图标?
我测试这个在Windows Phone 8.0
这里是代码调用登录页面:
private async void ShowLoginPage()
{
ToolbarItems.Clear();
var page = new NavigationPage(new LoginPage());
await Navigation.PushAsync(page);
}
,这里是返回到第一页的代码:
private void Cancel()
{
Navigation.PopToRootAsync();
}
我正在运行Xamarin.Forms v1.2.2.6243
有一个选项,你有一个,我在我自己的应用程序中实现,是一个自定义渲染器,从应用程序中删除导航标题,然后您可以构建自己的自定义标题。采用这种方法,您确实会失去应用程序的本地特性,并且必须实现您自己的大部分过渡功能。但是,它给你更多的控制外观。
CustomRenderer该删除的导航栏:
//add using statements
// add all view here that need this custom header, might be able to build a
//base page that others inherit from, so that this will work on all pages.
[assembly: ExportRenderer(typeof(yourView), typeof(HeaderRenderer))]
class HeaderRenderer : PageRenderer
{
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
this.NavigationController.SetNavigationBarHidden(true, true);
}
}
在此之后,你可以建立一个可以放置在每一页上(我用XAML)的顶部的标题视图,所以我不知道这是否是与你申请相关。
编辑:您可能需要为不同的页面类型更改此渲染器。
有一两件事你可以尝试是保持你的登录页NavigationPage
的里面,然后而不是运行在登录页面内PopAsync()
他们已经成功登录后,只需用旧的导航页面替换MainPage
:
在你的App类:
public NavigationPage AppNavPage = new NavigationPage(new FirstPage());
public App() {
MainPage = AppNavPage;
}
在您的第一页:
private async void ShowLoginPage() {
ToolbarItems.Clear();
var page = new NavigationPage(new LoginPage());
await Navigation.PushAsync(page);
}
在登录页面:
private async void OnCreateClicked(object sender, EventArgs e) {
bool loginInfoIsGood = CheckLoginInfo(); //Check their login info
if(loginInfoIsGood) {
Application.Current.MainPage = App.AppNavPage;
}
}
否则,我也做了自定义渲染为NavigationRenderer
iOS上插入工具栏项目上的导航栏的右侧,并已覆盖了一些Menu
相关Android上的东西来改变图标的文字/颜色。
听起来很有趣。将调查。 – 2014-10-04 00:40:01
如果您需要任何更多的帮助与执行让我知道。 – 2014-10-04 02:19:27
ViewWillAppear似乎不可用作可覆盖的方法。 ViewDidAppear也不是。有任何想法吗? – 2014-10-15 23:55:17