【问题标题】:Xamarin MasterDetailPage always null Master and Detail when newing up更新时 Xamarin MasterDetailPage 始终为空 Master 和 Detail
【发布时间】:2017-11-21 04:24:49
【问题描述】:

我已采用此 Xamarin Forms 演示中显示的方法。

https://github.com/xamarin/xamarin-forms-samples/tree/master/Navigation/MasterDetailPage/MasterDetailPageNavigation

但是,当我创建一个新的 MainPage 时,Master 和 Detail 都为空......我预计它将分别是我的 MenuPage 和 TabPage。这是一个错误还是我做错了什么?

主页:

<MasterDetailPage  xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:ctr="clr-namespace:MyApp.Core.Views;assembly=MyApp.Core"
         x:Class="SmartMiner.Core.Views.MainPage"
         >
<MasterDetailPage.Master>
    <ctr:MenuPage x:Name="MenuPage"/>
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
    <ctr:TabPage x:Name="TabPage" />
</MasterDetailPage.Detail>

菜单页(主)

<ContentPage 
xmlns="http://xamarin.com/schemas/2014/forms" 
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
Title="Menu"
x:Name="MenuPage"
x:Class="MyApp.Core.Views.MenuPage"
>
<ContentPage.Content>
</ContentPage.Content>

标签页(详情)

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms" 
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
x:Class="MyApp.Core.Views.TabPage"
xmlns:tab="clr-namespace:SmartMiner.Core.Views;assembly=SmartMiner.Core"
Title="Tabs Page"
>
<tab:Tab1 Title="Tab One"/>
<tab:Tab2 Title="Tab Two" />
<tab:Tab3 Title="Tab Three" />

初始化

protected override void OnStart(){
        var mainPage = new MainPage();
        if (Device.RuntimePlatform == Device.iOS)
            MainPage = mainPage;
        else
            MainPage = new NavigationPage(mainPage); 
    }

检查var mainPage的结果是属性Master和Detail为null,指定MainPage抛出错误

“在分配给MainPage之前必须设置Master和Detail”

【问题讨论】:

  • 两者都为空是什么意思?
  • 我已经更新了我的问题以包含结果。
  • MainPage = new MainPage();把他的线放在 App() 里,不要放在 OnStart() 里
  • 谢谢,我已经在 App init 以及目前在 OnStart 中尝试过......两者都产生相同的结果
  • 看我的回答。 nav page是detail page,不是masterdetail page

标签: c# xaml xamarin.forms master-detail


【解决方案1】:

我可以发现几个问题。

主页面需要在 App 构造函数中创建和赋值。也不要将 MainPage 包装在 NavigationPage 中。您可以在详细信息页面中执行此操作。

您的 App.xaml.cs 应如下所示:

   public partial class App : Application
    {
        public App()
        {
            InitializeComponent();

             MainPage = new MainPage();
        }

        protected override void OnStart()
        {
            // Handle when your app starts
        }

        protected override void OnSleep()
        {
            // Handle when your app sleeps
        }

        protected override void OnResume()
        {
            // Handle when your app resumes
        }
    }

这是主详细信息页面(您的 MainPage)

<?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="MasterDetailTest.MainPage"
             xmlns:ctr="clr-namespace:MasterDetailTest">
  <MasterDetailPage.Master>
    <ctr:MenuPage x:Name="MenuPage" />
  </MasterDetailPage.Master>
  <MasterDetailPage.Detail>
    <NavigationPage>
      <x:Arguments>
        <ctr:TabPage x:Name="TabPage" />
      </x:Arguments>
    </NavigationPage>
  </MasterDetailPage.Detail>
</MasterDetailPage>

菜单页面

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MasterDetailTest.MenuPage"
             Title="Menu">
    <ContentPage.Content>
    </ContentPage.Content>
</ContentPage>

标签页

<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:tab="clr-namespace:MasterDetailTest;assembly=MasterDetailTest"
             x:Class="MasterDetailTest.TabPage">
    <tab:Tab1Page Title="Tab 1" />
    <tab:Tab2Page Title="Tab 2" />
</TabbedPage>

其中一个标签页

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MasterDetailTest.Tab1Page">
    <ContentPage.Content>
        <StackLayout>
            <Label Text="Tab One"
                VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2017-08-13
    • 2018-01-02
    • 1970-01-01
    • 2018-01-17
    • 2013-01-07
    • 1970-01-01
    相关资源
    最近更新 更多