1

因爲我是Xamarin新手,我真的不知道如何在頁面之間切換。所以我提到互聯網並找到了一些解決方案。但有一些錯誤。任何人都可以幫助解決這個問題?這是我在app.cs文件中的代碼。我對代碼進行評論,我不確定。當我點擊btn1時,觸發了一個名爲「pushAsync在ios上不支持全局」的錯誤。使用Xamarin.Forms我需要從一個頁面導航到另一個頁面上xamarin.Forms.app

using System; 

;

命名空間礦山 { 公共類應用:應用 { 公共應用程序(){

 // The root page of your application 


     Button btn1 = new Button(); 
     Button btn2 = new Button(); 
     Button btn3 = new Button(); 
     btn1.Text= "Farmer"; 
     btn2.Text= "Advisor"; 
     btn3.Text= "Supplier"; 

     MainPage = new ContentPage { 
      Content = new StackLayout { 
       VerticalOptions = LayoutOptions.Center, 
       Children = { 
        new Label { 
         XAlign = TextAlignment.Center, 
         Text = "Welcome to Rice Growing Advisor!" 
          //App.Navigation.PushAsync(new MyCustomContentPage()); 
          //App.Navigation.PushAsync (new MainPage()); 
        }, btn1,btn2,btn3 
       } 
      } 



     }; 
     //var np = new NavigationPage(new MainPage()); 
     //MainPage=np; 
     //MainPage = new NavigationPage (MainPage); 
     //var rootPage = new NavigationPage(MainPage); 



     btn1.Clicked += async (sender, e) => { 
      //MainPage= new NavigationPage(new MainPage()); 
      //MainPage = np; 

      await MainPage.Navigation.PushAsync(new NavigationPage()); 
      MainPage.Navigation.RemovePage(MainPage); 




     }; 

    } 

    protected override void OnStart() 
    { 
     // Handle when your app starts 
    } 

    protected override void OnSleep() 
    { 
     // Handle when your app sleeps 
    } 

    protected override void OnResume() 
    { 
     // Handle when your app resumes 
    } 
} 

}

+0

您需要首先將您的主頁設置爲導航頁面,然後在其上按下頁面。 –

+0

當問題 聲明僅僅是「它不起作用」時,很難提供解決方案。請編輯您的 問題,以更全面地描述您的 預期會發生什麼,以及與實際的 結果有何不同。請參閱[問]提示什麼使得一個好的 解釋。 –

+0

@TobySpeight他在代碼中將錯誤寫爲註釋。 –

回答

1

導航屬性的VisualElement。 Button.Clicked的所有代碼都在App類(它是Application的子類)的構造函數中,它沒有「Navigation」屬性。 你的情況你可以使用MainPage.Navigation(因爲MainPage是一個Page和Page是一個VisualElement)。但還有一個問題:您的MainPage不是NavigationPage,因此您無法執行PushAsync(..)。要解決這個問題,你應該只是包裝ContentPage進入導航頁面是這樣的:

var page = new ContentPage { 
     Content = new StackLayout { 
      VerticalOptions = LayoutOptions.Center, 
      Children = { 
       new Label { 
        XAlign = TextAlignment.Center, 
        Text = "Welcome to Rice Growing Advisor!" 
         //App.Navigation.PushAsync(new MyCustomContentPage()); 
         //App.Navigation.PushAsync (new MainPage()); 
       }, btn1,btn2,btn3 
      } 
     } 
    }; 

    MainPage = new NavigationPage(page); 

順便說一句,this arcticle將幫助ü明白是怎麼回事。

編輯:

using System; 
using Xamarin.Forms; 

namespace test 
{ 
    public class App : Application 
    { 
     public App() 
     { 
      // The root page of your application 

      // set up properties via object initializer for clarity 
      Button btn1 = new Button {Text = "Farmer"}; 
      Button btn2 = new Button {Text = "Advisor"}; 
      Button btn3 = new Button {Text = "Supplier"}; 

      var page = new ContentPage { 
       Content = new StackLayout { 
        VerticalOptions = LayoutOptions.Center, 
        Children = { 
         new Label { 
          // XAlign is obsolete, use HorizontalTextAlignment instead 
          HorizontalTextAlignment = TextAlignment.Center, 
          Text = "Welcome to Rice Growing Advisor!" 
         }, btn1,btn2,btn3 
        } 
       } 
      }; 

      // wrap our page into NavigationPage 
      // if we dont do that, we'll get "PushAsync is not supported globally on iOS" exception 
      MainPage = new NavigationPage(page); 

      btn1.Clicked += async (sender, e) => { 
       var secondPage = new ContentPage 
       { 
        Content = new Label 
        { 
         Text = "Click \"BACK\" to navigate backward", 
         HorizontalTextAlignment = TextAlignment.Center, 
         VerticalTextAlignment = TextAlignment.Center 
        } 
       }; 
       secondPage.ToolbarItems.Add(new ToolbarItem("BACK", null, async() => { await secondPage.Navigation.PopAsync();})); 

       await MainPage.Navigation.PushAsync(secondPage); 
      }; 
     } 

     protected override void OnStart() 
     { 
      // Handle when your app starts 
     } 

     protected override void OnSleep() 
     { 
      // Handle when your app sleeps 
     } 

     protected override void OnResume() 
     { 
      // Handle when your app resumes 
     } 
    } 
} 

我希望這個工作正常。

+0

嘿@ flame239,非常感謝您的回答。我只是按照您在這裏描述的方式進行操作,並且僅在單擊該按鈕時在我的main.cs文件中出現錯誤。我可以在這裏輸入錯誤信息「System.InvalidOperationException被拋出,導航頁面在使用前必須有一個根頁面」。所以我可以知道如何將我的主頁設置爲根頁面以及將代碼放在哪裏?其他的事情,當我點擊按鈕時,main.cs文件中存在另一個錯誤。這是說在ios上全球不支持pushAsync。請使用導航頁面。所以我想要做什麼?請幫我解決這個問題。 – Izu

+0

@ISURU向我展示了你的當前代碼,因爲你的文章中的代碼包含很多其他錯誤(例如,「新的ExamplePage()」聲明無效,ExamplePage沒有無參數的構造函數;「new ExamplePage(stackIndex + 1)「 - stackIndex沒有定義;」Navigation.RemovePage(this)「 - 參數應該是頁面類型,而不是應用程序;等等......) – Flame239

+0

hey @ flame239我爲按鈕點擊寫的代碼如下。 btn1。Clicked + = async(sender,e)=> {MainPage.Navigation.PushAsync(new NavigationPage());}};}}; \t \t \t \t MainPage.Navigation.RemovePage(MainPage); }; 我刪除了我插入的所有其他代碼。這是我新寫的唯一代碼。但是當我點擊按鈕時出現了一個錯誤,因爲「ios上不支持全球範圍的pushAsync」。我很肯定你不會通過這個評論得到一個清晰的想法。真的我充滿了這一點,我試了一整天,但我無法做到.. :( – Izu

0

Navigation是頁面的一個屬性。你必須打電話像

await MainPage.Navigation.PushAsync(new ExamplePage(1)); 
+0

非常感謝@ Sven-MichaelStübe。得到它了!! :) – Izu

相關問題