关闭Xamarin表单导航抽屉

问题描述:

我刚从Xamarin表单开始,并跟着this的例子。但对于横向模式,它总是打开导航抽屉。这是默认行为吗?下面是我的代码关闭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)我将如何控制导航抽屉的开启和关闭?我找到了一种方法可以让我们控制导航抽屉的宽度。 Here是链接。但这是现在最好的选择吗?

1)由于项目需要跨平台Xamarin表单控件似乎是其中一个选项。

2)我们应该与自定义控件一起去,而不是Xamarin形式的控件?

我刚开始使用Xamarin示例代码将不胜感激,如果有人可以指导我通过这个。

您需要在MasterDetailPage上设置MasterBehavior = MasterBehavior.Popover以强制它展现出您之后的行为,否则它将默认为MasterBehavior.Default,在横向模式下它将始终打开。

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

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

注:
我相信对于初学者,最重要的是学会如何使用DependencyService实现原生代码,同时也使用设计模式,如MVVM