C# 关闭Xamarin表单导航抽屉

C# 关闭Xamarin表单导航抽屉,c#,xamarin.ios,xamarin.android,C#,Xamarin.ios,Xamarin.android,我只是从Xamarin表单开始,并遵循示例。但对于横向模式,它总是打开导航抽屉。这是默认行为吗?下面是我的代码 public class NavigationDrawer : MasterDetailPage // Navigation Drawer using MasterDetailPage { public override bool ShouldShowToolbarButton() { return true; } Content

我只是从Xamarin表单开始,并遵循示例。但对于横向模式,它总是打开导航抽屉。这是默认行为吗?下面是我的代码

  public class NavigationDrawer : MasterDetailPage  // Navigation Drawer using MasterDetailPage
{
    public override bool ShouldShowToolbarButton()
    {
        return true;
    }

    ContentPage gotoPage;
    public NavigationDrawer()
    {

        Title = "Navigation Drawer Using MasterDetailPage";
        string[] myPageNames = { "Camera2 Demo", "Second", "Third" };
        SizeChanged += NavigationDrawer_SizeChanged;
        ListView listView = new ListView
        {
            ItemsSource = myPageNames,
        };
        this.Master = new ContentPage
        {
            Title = "Options",
            Content = listView,
            Icon = "hamburger.png"
        };

        listView.ItemTapped += (sender, e) =>
        {

            switch (e.Item.ToString())
            {
                case "Camera2 Demo":
                    gotoPage = new CameraPage();
                    break;
                case "Second":
                    gotoPage = new SecondPage();
                    break;
                case "Third":
                    gotoPage = new ThirdPage();
                    break;
                default:
                    gotoPage = new NavigationPage1();
                    break;
            }

            Detail = new NavigationPage(gotoPage);
            ((ListView)sender).SelectedItem = null;
             this.IsPresented = true;

        };

        Detail = new NavigationPage(new HomePage());
        IsPresented = false;

        //// For Windows Phone, provide a way to get back to the master page.
        //if (Device.OS == TargetPlatform.WinPhone)
        //{
        //    (this.Detail as ContentPage).Content.GestureRecognizers.Add(
        //        new TapGestureRecognizer((view) =>
        //        {
        //            this.IsPresented = true;
        //        }));
        //}
    }
问题:

1) 如何控制导航抽屉的打开和关闭?我找到了一种方法,可以让我们控制导航抽屉的宽度。是链接。但这是目前最好的选择吗

1) 由于项目要求是跨平台的,所以Xamarin表单控件似乎是选项之一

2) 我们应该使用自定义控件而不是Xamarin窗体控件吗

我刚开始学习Xamarin示例代码,如果有人能指导我完成这项工作,我将不胜感激

1) 如何控制导航抽屉的打开和关闭

使用
this.IsPresented=true
打开并
this.IsPresented=false关闭抽屉。
关于其他问题,我不太了解您,但根据您的要求,您应该创建自定义控件或从
NuGet
下载一个

注意:
我认为对于初学者来说,最重要的事情是学习如何使用
DependencyService
实现本机代码,以及使用类似MVVM的设计模式

1) 如何控制导航抽屉的打开和关闭

使用
this.IsPresented=true
打开并
this.IsPresented=false关闭抽屉。
关于其他问题,我不太了解您,但根据您的要求,您应该创建自定义控件或从
NuGet
下载一个

注意:

我认为对于初学者来说,最重要的事情是学习如何使用
DependencyService
实现本机代码,以及使用设计模式,如MVVM

您需要在MasterDetailPage上设置
MasterBehavior=MasterBehavior.Popover
,以强制它显示您所追求的行为,否则它将默认为
MasterBehavior.default
,在横向模式下它将始终打开。

您需要在MasterDetailPage上设置
MasterBehavior=MasterBehavior.Popover
,以强制它显示您所追求的行为,否则它将默认为
MasterBehavior.default
,在横向模式下,它将始终打开。

因此,如果使用MVVM,则在ViewModel中创建一个属性IsPresented(使用INPC),并使用mode=TwoWay将MasterDetail页面的IsPresented属性绑定到它,然后,在ViewModel中,您可以在需要时将其设置为True/False,而无需担心干扰其默认行为。因此,如果使用MVVM,则在ViewModel中创建一个IsPresented属性(使用INPC),并使用Mode=TwoWay将MasterDetail页的IsPresented属性绑定到它,然后,在ViewModel中,您可以在需要时将其设置为True/False,而无需担心干扰其默认行为。