MasterDetailPage:UWP / Android上的不同行为

时间:2016-10-30 13:48:39

标签: xamarin xamarin.forms

在Xamarin.Forms中使用MasterDetailPage时,它在Android中的行为与预期相同。就像普通的导航抽屉一样。请注意滑入式机构的正确行为以及汉堡按钮的正确位置。菜单中的按钮也很好用。

enter image description here enter image description here

UWP App看起来像这样。请注意,没有汉堡包按钮: enter image description here

点击菜单按钮后,菜单消失了,无法将其取回: enter image description here

以下是一些代码摘录:

App.xaml.cs

public partial class App : Application
{
    public App()
    {
        MainPage = new NavigationPage(new MenuPage());
    }
...

MenuPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="WordDeck.MenuPage"
             xmlns:local="clr-namespace:WordDeck;assembly=WordDeck"
             Title="WordDeck."
             MasterBehavior="Default">

  <MasterDetailPage.Master>
    <ContentPage Title="Menu">
      <StackLayout Orientation="Vertical">
        <Button Text="Neues Spiel"
                Clicked="MainPage_Clicked"></Button>
        <Button Text="Deck Verwaltung"
                Clicked="DeckManager_Clicked"></Button>
      </StackLayout>
    </ContentPage>
  </MasterDetailPage.Master>

  <MasterDetailPage.Detail>
    <local:MainPage></local:MainPage>
  </MasterDetailPage.Detail>

</MasterDetailPage>

MenuPage.xaml.cs

public partial class MenuPage : MasterDetailPage
    {
        public MenuPage()
        {
            InitializeComponent();
        }

        private void MainPage_Clicked(object sender, EventArgs e)
        {
            Detail = new MainPage();
            Title = "WordDeck.";
            IsPresented = false;
        }

        private void DeckManager_Clicked(object sender, EventArgs e)
        {
            Detail = new DeckManagerPage();
            Title = "Deck Verwaltung";
            IsPresented = false;
        }
    }

MainPage和DeckManagerPage几乎为空,类型为ContentPage。

为什么UWP上没有菜单按钮?

2 个答案:

答案 0 :(得分:2)

这是因为您将UWP应用程序作为桌面应用程序运行,而不是在手机上运行。如果您在手机或模拟器上运行应用程序,则应该看到Android上的菜单。

如果您想在MasterDetailPage上作为桌面应用程序集MasterBehavior = MasterBehavior.Popover运行时使用汉堡包行为

答案 1 :(得分:1)

主要问题是桌面上的IsPresented隐藏了抽屉。 处理此问题的一种方法是不要隐藏在桌面或平板电脑上。

例如......

// Called from each Clicked Event
private void SetPresentedVisability()
{
    switch (Device.Idiom)
    {
        case TargetIdiom.Phone:
            IsPresented = false;
            break;
        case TargetIdiom.Desktop:
        case TargetIdiom.Tablet:
        case TargetIdiom.Unsupported:
            IsPresented = true;
            break;
    }
}

或者,您可以忽略任何非手机IsPresented设置。

IsPresented = (Device.Idiom == TargetIdiom.Phone) ? false : true;