【问题标题】:How to open master detail menu from another content page button click?如何从另一个内容页面按钮单击打开主详细菜单?
【发布时间】:2018-03-16 10:24:53
【问题描述】:

我想从另一个内容页面按钮单击事件打开主详细信息菜单? 那么如何以 xamarin 形式执行此操作?

【问题讨论】:

    标签: xamarin xamarin.forms


    【解决方案1】:

    您可以通过将MasterDetailPage.IsPresented设置为true来打开菜单页面。

    简单的方法是MessagingCenter。向MasterDetailPage 添加MessagingCenter.Subscribe 并在您的VM 中添加MessagingCenter.Send

    例子

    public class MenuPage : ContentPage
    {
        public MenuPage()
        {
            Title = "Test";
            Content = new StackLayout
            {
                Children = {
                    new Label { Text = "Welcome to Xamarin.Forms!" }
                }
            };
        }
    }
    
    public class DetailPage : ContentPage
    {
        public DetailPage()
        {
            var button = new Button()
            {
                Text = "Menu"
            };
            button.Clicked += Button_Clicked;
            Content = new StackLayout
            {
                Children = {
                    button
                }
            };
        }
    
        private void Button_Clicked(object sender, EventArgs e)
        {
            MessagingCenter.Send(EventArgs.Empty, "OpenMenu");
        }
    }
    
    
    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();
    
            var masterDetailPage = new MasterDetailPage();
            masterDetailPage.Master = new MenuPage();
            masterDetailPage.Detail = new NavigationPage( new DetailPage());
            MainPage = masterDetailPage;
            MessagingCenter.Subscribe<EventArgs>(this, "OpenMenu", args =>
            {
                masterDetailPage.IsPresented = true;
            });
    
        }
    }
    

    【讨论】:

    • 我加了exaple,你可以试试
    • 如果这是您问题的答案,您应该将其标记为正确答案
    【解决方案2】:

    在您要打开抽屉菜单的页面上,您必须在点击事件或任何您想要的设置上设置“消息发送”。就我而言,我将其设置在图像点击事件中。

    public void ToggleDrawer(object sender, System.EventArgs e)
    {
      MessagingCenter.Send(EventArgs.Empty, "OpenMenu");
    }
    

    现在,在 MasterDetailPage(在我的例子中为 Mainpage.xaml.cs)上,您必须在 InitializeComponent() 上方的该页面上放置消息订阅。

    MessagingCenter.Subscribe<EventArgs>(this, "OpenMenu", args =>
    {
       IsPresented = !IsPresented;
    });
    

    这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 2015-08-30
      相关资源
      最近更新 更多