1

Поскольку я новичок в Xamarin, я действительно понятия не имею, как переключаться между страницами. поэтому я ссылаюсь на интернет и нашел какое-то решение. Но есть некоторые ошибки. Может кто-нибудь помочь разобраться в этой проблеме? Вот мой код в файле app.cs. Я добавляю комментарии к кодам, которые я не уверен. Когда я нажимаю btn1, это вызвало ошибку с именем «pushAsync» не поддерживается глобально на ios ».Мне нужно перейти с одной страницы на другую страницу на xamarin.Forms.app

using System; 

с использованием Xamarin.Forms;

пространства имен шахта { общественного класс App: Применение { общественного приложения() {

 // 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

Трудно предложить решения, когда проблема проста: «это не работает». Пожалуйста, отредактируйте свой вопрос, чтобы дать более полное описание того, что вы ожидаете от , и как это отличается от фактических . См. [Ask] для подсказок о том, что делает хорошее объяснение . –

+0

@TobySpeight он написал ошибку в качестве комментария в коде. –

ответ

1

Навигация является собственностью VisualElement. Весь код для Button.Clicked находится в конструкторе класса App (который является подкадром приложения), который не имеет свойства «Навигация». В вашем случае вы можете использовать MainPage.Navigation (потому что MainPage является страницей и страницей является 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); 

Btw, this arcticle поможет U, чтобы понять, что происходит.

EDIT:

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. NavigationPage должен иметь корневую страницу перед использованием ». так что я могу узнать, как настроить мою главную страницу как корневую страницу и куда ее поместить? другое дело, есть еще одна ошибка в файле main.cs, когда я нажимаю кнопку. Это говорит о том, что pushAsync не поддерживается глобально на ios. используйте страницу навигации. так что я хочу делать? Пожалуйста, помогите мне разобраться с этой проблемой. – Izu

+0

@ISURU покажите мне, пожалуйста, ваш текущий код, потому что код в вашем сообщении содержит много других ошибок (например, «новый пример»() «satement недействителен, ExamplePage не имеет конструктора без аргументов», новый ExamplePage (stackIndex + 1) "- stackIndex не определен;" Navigation.RemovePage (this) "- аргумент должен иметь тип страницы, а не приложение и т. Д.) – Flame239

+0

hey @ flame239 код, который я написал для кнопки, был следующим: , btn1.Нажмите + = async (отправитель, e) => {\t \t \t \t ждут MainPage.Navigation.PushAsync (новая NavigationPage()); \t \t \t \t MainPage.Navigation.RemovePage (MainPage); }; Я удаляю все другие коды, которые я вставлял. Это единственный код, который я написал новый. но когда я нажимаю кнопку, произошла ошибка, так как «pushAsync не поддерживается глобально на ios». Я уверен, что вы не получите четкого представления по этому комментарию. действительно я полна этого, я пробовал целый день, но я не смог это сделать .. :( – Izu

0

Navigation является свойством Page. Вы должны называть что-то вроде

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

Большое спасибо @ Свен-Майкл Стьюбе. Понял!! :) – Izu

Смежные вопросы