2014-10-01 76 views
4

我的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

回答

1

有一個選項,你有一個,我在我自己的應用程序中實現,是一個自定義渲染器,從應用程序中刪除導航標題,然後您可以構建自己的自定義標題。採用這種方法,您確實會失去應用程序的本地特性,並且必須實現您自己的大部分過渡功能。但是,它給你更多的控制外觀。

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)的頂部的標題視圖,所以我不知道這是否是與你申請相關。

編輯:您可能需要爲不同的頁面類型更改此渲染器。

+0

聽起來很有趣。將調查。 – 2014-10-04 00:40:01

+0

如果您需要任何更多的幫助與執行讓我知道。 – 2014-10-04 02:19:27

+0

ViewWillAppear似乎不可用作可覆蓋的方法。 ViewDidAppear也不是。有任何想法嗎? – 2014-10-15 23:55:17

3

有一兩件事你可以嘗試是保持你的登錄頁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上的東西來改變圖標的​​文字/顏色。

相關問題