xamarin - 使用 Xamarin Forms 在每个页面上显示不同的工具栏按钮

标签 xamarin xamarin.forms

我的 Xamarin Forms 应用中有 2 页。我的第一页在工具栏中有 4 个图标。我的第二个页面是一个登录页面,工具栏中有一个勾号和一个叉号。

除非我将其设为导航页面,否则我无法让登录页面显示任何图标。我还必须在调用 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

最佳答案

您可以尝试的一件事是将您的登录页面保留在 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 上的相关内容以更改图标文本/颜色。

关于xamarin - 使用 Xamarin Forms 在每个页面上显示不同的工具栏按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26132500/

相关文章:

c# - 如何从 C++ 为 Xamarin.Android 创建 C# DLL

android - Xamarin 表格 : How to change Toolbar height in Android?

azure - Xamarin Azure 移动服务应用程序权限

image - 具有相同 imageSource 的多个图像并不总是加载 (Xamarin)

c# - 如何使用 MVVM 和 Xamarin.Forms ListView ItemSelected 事件来检索所选项目的绑定(bind)属性?

c# - Xamarin 不兼容的目标框架错误 - NuGet 可以帮助我吗?

c# - 选择器的完成按钮的 Event_Handler

ios - 自定义类型的 UIButton 丢失 Click 事件

c# - 使用 Xamarin 进行光学字符识别

c# - Xamarin iOS : Starting timer crashes app with no exception