Xamarin MasterDetailPage 在更新时始终为 null Master 和 Detail
Xamarin MasterDetailPage always null Master and Detail when newing up
我采用了此 Xamarin Forms 演示中所示的方法。
然而,当我创建一个新的 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>
TabPage(详情)
<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 为空,MainPage 的指定抛出错误
"Master and Detail must be set before assigning it to MainPage"
我可以发现几个问题。
需要在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>
我采用了此 Xamarin Forms 演示中所示的方法。
然而,当我创建一个新的 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>
TabPage(详情)
<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 为空,MainPage 的指定抛出错误
"Master and Detail must be set before assigning it to MainPage"
我可以发现几个问题。
需要在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>