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

相关问题