【发布时间】:2018-03-16 10:24:53
【问题描述】:
我想从另一个内容页面按钮单击事件打开主详细信息菜单? 那么如何以 xamarin 形式执行此操作?
【问题讨论】:
标签: xamarin xamarin.forms
我想从另一个内容页面按钮单击事件打开主详细信息菜单? 那么如何以 xamarin 形式执行此操作?
【问题讨论】:
标签: xamarin xamarin.forms
您可以通过将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;
});
}
}
【讨论】:
在您要打开抽屉菜单的页面上,您必须在点击事件或任何您想要的设置上设置“消息发送”。就我而言,我将其设置在图像点击事件中。
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;
});
这对我有用。
【讨论】: