How do you switch pages in Xamarin.Forms?

后端 未结 13 1207
我在风中等你
我在风中等你 2020-12-02 07:08

How do you switch between pages in Xamarin Forms?

My main page is a ContentPage and I don\'t want to switch to something like a Tabbed Page.

I\'ve been abl

相关标签:
13条回答
  • 2020-12-02 07:41

    If your project has been set up as a PCL forms project (and very likely as Shared Forms as well but I haven't tried that) there is a class App.cs that looks like this:

    public class App
    {
        public static Page GetMainPage ()
        {     
            AuditorDB.Model.Extensions.AutoTimestamp = true;
            return new NavigationPage (new LoginPage ());
        }
    }
    

    you can modify the GetMainPage method to return a new TabbedPaged or some other page you have defined in the project

    From there on you can add commands or event handlers to execute code and do

    // to show OtherPage and be able to go back
    Navigation.PushAsync(new OtherPage());
    
    // to show AnotherPage and not have a Back button
    Navigation.PushModalAsync(new AnotherPage()); 
    
    // to go back one step on the navigation stack
    Navigation.PopAsync();
    
    0 讨论(0)
  • 2020-12-02 07:44
    In App.Xaml.Cs:
    
    MainPage = new NavigationPage( new YourPage());
    

    When you wish to navigate from YourPage to the next page you do:

    await Navigation.PushAsync(new YourSecondPage());
    

    You can read more about Xamarin Forms navigation here: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/navigation/hierarchical

    Microsoft has quite good docs on this.

    There is also the newer concept of the Shell. It allows for a new way of structuring your application and simplifies navigation in some cases.

    Intro: https://devblogs.microsoft.com/xamarin/shell-xamarin-forms-4-0-getting-started/

    Video on basics of Shell: https://www.youtube.com/watch?v=0y1bUAcOjZY&t=3112s

    Docs: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/shell/

    0 讨论(0)
  • 2020-12-02 07:44

    XAML page add this

    <ContentPage.ToolbarItems>
                <ToolbarItem Text="Next" Order="Primary"
                Activated="Handle_Activated"/>
    
    </ContentPage.ToolbarItems>   
    

    on the CS page

     async void Handle_Activated(object sender, System.EventArgs e)
            {
                await App.Navigator.PushAsync(new PAGE());
            }
    
    0 讨论(0)
  • 2020-12-02 07:47

    Push a new page onto the stack, then remove the current page. This results in a switch.

    item.Tapped += async (sender, e) => {
        await Navigation.PushAsync (new SecondPage ());
        Navigation.RemovePage(this);
    };
    

    You need to be in a Navigation Page first:

    MainPage = NavigationPage(new FirstPage());
    

    Switching content isn't ideal as you have just one big page and one set of page events like OnAppearing ect.

    0 讨论(0)
  • 2020-12-02 07:55

    Xamarin.Forms supports multiple navigation hosts built-in:

    • NavigationPage, where the next page slide in,
    • TabbedPage, the one you don't like
    • CarouselPage, that allows for switching left and right to next/prev pages.

    On top of this, all pages also supports PushModalAsync() which just push a new page on top of the existing one.

    At the very end, if you want to make sure the user can't get back to the previous page (using a gesture or the back hardware button), you can keep the same Page displayed and replace its Content.

    The suggested options of replacing the root page works as well, but you'll have to handle that differently for each platform.

    0 讨论(0)
  • 2020-12-02 07:57

    One page to another page navigation in Xamarin.forms using Navigation property Below sample code

    void addClicked(object sender, EventArgs e)
            {
                //var createEmp = (Employee)BindingContext;
                Employee emp = new Employee();
                emp.Address = AddressEntry.Text;   
                App.Database.SaveItem(emp);
                this.Navigation.PushAsync(new EmployeeDetails());
      this.Navigation.PushModalAsync(new EmployeeDetails());
            }
    

    To navigate one page to another page with in view cell Below code Xamrian.forms

     private async void BtnEdit_Clicked1(object sender, EventArgs e)
            {
                App.Database.GetItem(empid);
                await App.Current.MainPage.Navigation.PushModalAsync(new EmployeeRegistration(empid));
            }
    

    Example like below

    public class OptionsViewCell : ViewCell
        {
            int empid;
            Button btnEdit;
            public OptionsViewCell()
            {
            }
            protected override void OnBindingContextChanged()
            {
                base.OnBindingContextChanged();
    
                if (this.BindingContext == null)
                    return;
    
                dynamic obj = BindingContext;
                empid = Convert.ToInt32(obj.Eid);
                var lblname = new Label
                {
                    BackgroundColor = Color.Lime,
                    Text = obj.Ename,
                };
    
                var lblAddress = new Label
                {
                    BackgroundColor = Color.Yellow,
                    Text = obj.Address,
                };
    
                var lblphonenumber = new Label
                {
                    BackgroundColor = Color.Pink,
                    Text = obj.phonenumber,
                };
    
                var lblemail = new Label
                {
                    BackgroundColor = Color.Purple,
                    Text = obj.email,
                };
    
                var lbleid = new Label
                {
                    BackgroundColor = Color.Silver,
                    Text = (empid).ToString(),
                };
    
                 //var lbleid = new Label
                //{
                //    BackgroundColor = Color.Silver,
                //    // HorizontalOptions = LayoutOptions.CenterAndExpand
                //};
                //lbleid.SetBinding(Label.TextProperty, "Eid");
                Button btnDelete = new Button
                {
                    BackgroundColor = Color.Gray,
    
                    Text = "Delete",
                    //WidthRequest = 15,
                    //HeightRequest = 20,
                    TextColor = Color.Red,
                    HorizontalOptions = LayoutOptions.EndAndExpand,
                };
                btnDelete.Clicked += BtnDelete_Clicked;
                //btnDelete.PropertyChanged += BtnDelete_PropertyChanged;  
    
                btnEdit = new Button
                {
                    BackgroundColor = Color.Gray,
                    Text = "Edit",
                    TextColor = Color.Green,
                };
                // lbleid.SetBinding(Label.TextProperty, "Eid");
                btnEdit.Clicked += BtnEdit_Clicked1; ;
                //btnEdit.Clicked += async (s, e) =>{
                //    await App.Current.MainPage.Navigation.PushModalAsync(new EmployeeRegistration());
                //};
    
                View = new StackLayout()
                {
                    Orientation = StackOrientation.Horizontal,
                    BackgroundColor = Color.White,
                    Children = { lbleid, lblname, lblAddress, lblemail, lblphonenumber, btnDelete, btnEdit },
                };
    
            }
    
            private async void BtnEdit_Clicked1(object sender, EventArgs e)
            {
                App.Database.GetItem(empid);
                await App.Current.MainPage.Navigation.PushModalAsync(new EmployeeRegistration(empid));
            }
    
    
    
            private void BtnDelete_Clicked(object sender, EventArgs e)
            {
                // var eid = Convert.ToInt32(empid);
                // var item = (Xamarin.Forms.Button)sender;
                int eid = empid;
                App.Database.DeleteItem(empid);
            }
    
        }
    
    0 讨论(0)
提交回复
热议问题