【问题标题】:Xamarin forms MasterDetailPage navigationXamarin 表单 MasterDetailPage 导航
【发布时间】:2017-01-24 12:56:28
【问题描述】:

所以我一直在开发一个使用 MasterDetail 页面的应用程序,它运行良好,但我只是有点困惑它应该如何浏览页面。

目前,我的菜单项在应用程序中打开了一些页面,并且这些部分运行良好,侧边菜单仍然存在。我感到困惑的是如何处理正在显示的主页上的按钮。目前我的按钮只是打开一个新页面,但 MasterDetail 页面的侧边菜单只是消失在常规 NavigationPage 中。

我将在下面给出我的按钮代码。

btnSocial.GestureRecognizers.Add(new TapGestureRecognizer
{
    Command = new Command(() =>
    {
        Navigation.PushAsync(new SocialPage());
    })
});

这只是 MasterDetail 页面的导航方式还是您认为我做错了什么?

** 已编辑 **

如果这有帮助,我会附上我的菜单页和启动页代码:

MenuPage.cs

public class MenuPage : ContentPage
{
    public Action<ContentPage> OnMenuSelect { get; set; }

    public MenuPage()
    {
        Title = "Menu";
        Icon = "ic_menu.png";
        BackgroundColor = ProjectVariables.PRIMARY_COLOR;

        var items = new List<MenuItems>()
        {
            new MenuItems("Social", () => new SocialPage()),
            new MenuItems("Career", () => null),
            new MenuItems("MySchedule", () => null),
            new MenuItems("Videos", () => null),
            new MenuItems("Contact", () => null),
            new MenuItems("Sign in", () => null)
        };

        var dataTemplate = new DataTemplate(typeof(TextCell));

        dataTemplate.SetValue(TextCell.TextColorProperty, Color.White);
        dataTemplate.SetBinding(TextCell.TextProperty, "Name");

        var listview = new ListView()
        {
            ItemsSource = items,
            ItemTemplate = dataTemplate
        };

        listview.BackgroundColor = ProjectVariables.PRIMARY_COLOR;
        listview.ItemSelected += (object sender, SelectedItemChangedEventArgs e) =>
        {
            if(OnMenuSelect != null)
            {
                var item = (MenuItems)e.SelectedItem;
                var itemPage = item.PageFn();

                OnMenuSelect(itemPage);
            }
        };

        Content = new StackLayout
        {
            Orientation = StackOrientation.Vertical,
            Children =
            {
                listview
            }
        };
    }
}

LaunchPage.cs

public class LaunchPage : MasterDetailPage
{
    public LaunchPage()
    {
        var menuPage = new MenuPage();

        menuPage.OnMenuSelect = (categoryPage) =>
        {
            Detail = new NavigationPage(categoryPage);
            //Detail.Navigation.PushAsync(categoryPage);
            IsPresented = false;
        };

        Master = menuPage;
        Detail = new NavigationPage(new MainPage())
        {
            BarTextColor = Color.White,
            BarBackgroundColor = ProjectVariables.PRIMARY_COLOR
        };

        MasterBehavior = MasterBehavior.Split;
    }
}

【问题讨论】:

    标签: xamarin.forms master-detail


    【解决方案1】:

    看看来自 Xamarin 的 this documentation page

    您似乎没有为此使用导航服务。您需要对母版页的引用并为其设置 Detail 属性。

    特别注意this section

    public partial class MainPage : MasterDetailPage
    {
        public MainPage ()
        {
            ...
            masterPage.ListView.ItemSelected += OnItemSelected;
        }
    
        void OnItemSelected (object sender, SelectedItemChangedEventArgs e)
        {
            var item = e.SelectedItem as MasterPageItem;
            if (item != null) {
                Detail = new NavigationPage ((Page)Activator.CreateInstance (item.TargetType));
                masterPage.ListView.SelectedItem = null;
                IsPresented = false;
            }
        }
    }
    

    在选择ListView 项目时,他们设置了Detail 属性,它将为您进行导航。

    【讨论】:

    • 你看那是让我感到困惑的事情,我已经有它来处理菜单部分,但我不太确定如何使用实际页面上的按钮进行导航。我应该使用 ContentPages 还是应该只使用 MasterDetailPages?
    • 也许更简单,请注意,在示例代码中,他们将ContentPage 包装在NavigationPage 中,您尝试过吗?所以在你的代码中是:Navigation.PushAsync(new NavigationPage(new SocialPage()));
    猜你喜欢
    • 1970-01-01
    • 2018-03-01
    • 2018-12-10
    • 2018-08-16
    • 1970-01-01
    • 2015-04-21
    • 2018-04-02
    • 2018-11-09
    相关资源
    最近更新 更多