无法获得基本的 Hamburger Master Detail 视图

Couldn't get basic Hamburger Master Detail view

查看了所有问题和论坛后,我仍然无法获得带有汉堡包图标的主从页面。如果我使用此主详细信息页面作为应用程序启动,那么我会看到该功能按预期工作。请看下面的代码

DashBoadCreator.xaml `

<MasterDetailPage.Master>

</MasterDetailPage.Master>

<MasterDetailPage.Detail>

  </x:Arguments>
</NavigationPage>
</MasterDetailPage.Detail>
`

`public partial class DashBoadCreator : MasterDetailPage
{
DashboardMaster master;
DashboardDetail1 detil;
public DashBoadCreator()
{
InitializeComponent();
master = new DashboardMaster();
detil = new DashboardDetail1();

        Master = master;
        Master.Title = "this is a title";
        Master.Icon = "icon.png";
        Detail = new NavigationPage(detil);

    }

    // Event for Menu Item selection, here we are going to handle navigation based
    // on user selection in menu ListView

}`
DashboadMaster.xaml
`

<!-- 
         This StackLayout you can use for other
         data that you want to have in your menu drawer

    <StackLayout BackgroundColor="#e74c3c"
                 HeightRequest="75">

      <Label Text="Some Text title"
             FontSize="20"
             VerticalOptions="CenterAndExpand"
             TextColor="White"
             HorizontalOptions="Center"/>
    </StackLayout>         -->

<ListView x:Name="navigationDrawerList"
          RowHeight="60"
          SeparatorVisibility="None"
          BackgroundColor="#e8e8e8"
          ItemSelected="OnMenuItemSelected">

  <ListView.ItemTemplate>
    <DataTemplate>
      <ViewCell>

        <!-- Main design for our menu items -->
        <StackLayout VerticalOptions="FillAndExpand"
                     Orientation="Horizontal"
                     Padding="20,10,0,10"
                     Spacing="20">

          <Image Source="{Binding Icon}"
                 WidthRequest="40"
                 HeightRequest="40"
                 VerticalOptions="Center" />

          <Label Text="{Binding Title}"
                 FontSize="Medium"
                 VerticalOptions="Center"
                 TextColor="Black"/>
        </StackLayout>
      </ViewCell>
    </DataTemplate>
  </ListView.ItemTemplate>
</ListView>
`

` public 部分 class DashboardMaster : ContentPage {

public List<MasterPageItem> menuList { get; set; }

public DashboardMaster()
{
    Title = "samples";
    InitializeComponent();

    menuList = new List<MasterPageItem>();

    // Creating our pages for menu navigation
    // Here you can define title for item, 
    // icon on the left side, and page that you want to open after selection
    var page1 = new MasterPageItem() { Title = "Item 1", Icon = "itemIcon1.png", TargetType = typeof(DashboardDetail1) };
    var page2 = new MasterPageItem() { Title = "Item 2", Icon = "itemIcon2.png", TargetType = typeof(DashboardDetail1) };
    var page3 = new MasterPageItem() { Title = "Item 3", Icon = "itemIcon3.png", TargetType = typeof(DashboardDetail1) };
    var page4 = new MasterPageItem() { Title = "Item 4", Icon = "itemIcon4.png", TargetType = typeof(DashboardDetail1) };
    var page5 = new MasterPageItem() { Title = "Item 5", Icon = "itemIcon5.png", TargetType = typeof(DashboardDetail1) };
    var page6 = new MasterPageItem() { Title = "Item 6", Icon = "itemIcon6.png", TargetType = typeof(DashboardDetail1) };
    var page7 = new MasterPageItem() { Title = "Item 7", Icon = "itemIcon7.png", TargetType = typeof(DashboardDetail1) };
    var page8 = new MasterPageItem() { Title = "Item 8", Icon = "itemIcon8.png", TargetType = typeof(DashboardDetail1) };
    var page9 = new MasterPageItem() { Title = "Item 9", Icon = "itemIcon9.png", TargetType = typeof(DashboardDetail1) };

    // Adding menu items to menuList
    menuList.Add(page1);
    menuList.Add(page2);
    menuList.Add(page3);
    menuList.Add(page4);
    menuList.Add(page5);
    menuList.Add(page6);
    menuList.Add(page7);
    menuList.Add(page8);
    menuList.Add(page9);

    // Setting our list to be ItemSource for ListView in MainPage.xaml
    navigationDrawerList.ItemsSource = menuList;
    //Application.Current.MainPage = new DashboardMaster();
    // NavigationPage.SetHasNavigationBar(this, false);

}
private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e)
{
    DashBoadCreator creator = new DashBoadCreator();

    var item = (MasterPageItem)e.SelectedItem;
    Type page = item.TargetType;

    creator.Detail = new NavigationPage((Page)Activator.CreateInstance(page));
    creator.IsPresented = false;
}

}

<ListView.ItemTemplate>


          <Image Source="{Binding Icon}"
                    WidthRequest="40"
                    HeightRequest="40"
                    VerticalOptions="Center" />

          <Label Text="{Binding Title}"
                 FontSize="Medium"
                 VerticalOptions="Center"
                 TextColor="Black"/>
         <!-- <Label Text="{Binding Description}"
                 FontSize="Small"
                 VerticalOptions="End"/>-->
          <StackLayout VerticalOptions="End" HorizontalOptions="End">
            <Button Text="Apply" FontSize="10"  TextColor="Green" BorderWidth="1" HorizontalOptions="End" />
          </StackLayout>
        </StackLayout>

      </ViewCell>
    </DataTemplate>
  </ListView.ItemTemplate>

</ListView>

设置母版页图标以查看汉堡包图标

示例代码:

public masterpage()
{
     Icon = "hamburger.png";
}

我按照几个不同的教程编写了一个工作演示,并获得了其中最重要的部分。所以,至少对我来说,这是一个我能得到的更简单的演示。

检查此 link。

My github working demo

其中 Intervection 是一个随机的详细信息页面(按参数构造)。

如果您有任何疑问,请告诉我。

干杯伙计。圣诞快乐。

经过一些发现,我遇到了这个讨论

Missing menu button on MasterDetailPage when assigning App.MainPage

根据这些发现,我将 app.xaml.cs 更改如下

 MainPage = new NavigationPage(new MenuPage());
 MasterDetailTest.App.Current.MainPage.Navigation.PushAsync(new MainPage());

现在母版页始终是根页面,汉堡菜单按预期工作。对于遇到此问题的任何其他人,希望这能以某种方式帮助您