本文介绍了主详细页面Xamarin中的选项卡式页面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图添加xamarin文档中所示的选项卡式页面,但我不断收到以下错误System.NullReferenceException对象引用未设置为对象的实例."我需要为每个页面声明一个新对象还是使用xaml时自动完成?

I am trying to add a tabbed page as shown in the xamarin documentation but I keep getting the following error, System.NullReferenceException "Object reference not set to an instance of an object." Do I need to declare a new object for each page or is this done automatically when using xaml?

这是我的StackTrace,

Here is my StackTrace,

  at Xamarin.Forms.Platform.Android.AppCompat.Platform.LayoutRootPage(Xamarin.Forms.P age page, Int32 width, Int32 height) [0x0005d] in   C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\AppCompat\Plat form.cs:279
  at Xamarin.Forms.Platform.Android.AppCompat.Platform.Xamarin.Forms.Platform.Android.IPlatformLayout.OnLayout (Boolean changed, Int32 l, Int32 t, Int32 r, Int32 b) [0x00003] in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:196
  at Xamarin.Forms.Platform.Android.PlatformRenderer.OnLayout (Boolean changed, Int32 l, Int32 t, Int32 r, Int32 b) [0x0000e] in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\PlatformRenderer.cs:73
  at Android.Views.ViewGroup.n_OnLayout_ZIIII (IntPtr jnienv, IntPtr native__this, Boolean changed, Int32 l, Int32 t, Int32 r, Int32 b) [0x00009] in /Users/builder/data/lanes/3415/7db2aac3/source/monodroid/src/Mono.Android/platforms/android-23/src/generated/Android.Views.ViewGroup.cs:3427
  at (wrapper dynamic-method) System.Object:d59f31f1-b9b6-40ea-9254-a422fe409750 (intptr,intptr,bool,int,int,int,int)

这是我的代码,

using Xamarin.Forms;
namespace BSi.Mobile.Events.Views
{
    public partial class MainMasterDetailPage : MasterDetailPage
    {
        public MainMasterDetailPage()
        {
            InitializeComponent();
        }
    }
}

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
              xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
              xmlns:local="clr-namespace:BSi.Mobile.Events.Views;assembly=BSi.Mobile.Events"
              prism:ViewModelLocator.AutowireViewModel="True"
              x:Class="BSi.Mobile.Events.Views.MainMasterDetailPage">
    <MasterDetailPage.Master>
       <ContentPage Title="Default" Padding="10">
          <StackLayout>
             <Button Text="Home" Command="{Binding MenuSelectedCommand}"  CommandParameter="NavigationPage\MainPage"/>
             <Button Text="Event Schedule" Command="{Binding MenuSelectedCommand}" CommandParameter="NavigationPage\EventPage"/>
             <Button Text="Floor Plan" Command="{Binding MenuSelectedCommand}" CommandParameter="NavigationPage\FloorPlanPage"/>
             <Button Text="Sponsor/Media Partners" Command="{Binding MenuSelectedCommand}" CommandParameter="NavigationPage\SponsorsPage"/>
             <Button Text="Where To Eat" Command="{Binding MenuSelectedCommand}" CommandParameter="NavigationPage\FoodNearbyPage"/>
          </StackLayout>
       </ContentPage>
   </MasterDetailPage.Master>
   <MasterDetailPage.Detail>
       <TabbedPage>
           <TabbedPage.Children>
              <local:MainPage Title="Info" Icon="http://icons.iconarchive.com/icons/graphicloads/100-flat/256/home-icon.png"/>
              <local:EventPage Title="Sessions" Icon="http://icons.iconarchive.com/icons/graphicloads/100-flat/256/home-icon.png"/>
              <local:SpeakersPage Title="Speakers" Icon="http://icons.iconarchive.com/icons/graphicloads/100-flat/256/home-icon.png"/>
              <local:ExhibitsPage Title="Exhibits" Icon="http://icons.iconarchive.com/icons/graphicloads/100-flat/256/home-icon.png"/>
           </TabbedPage.Children>
       </TabbedPage>
   </MasterDetailPage.Detail>
</MasterDetailPage>


更新:

我已按照 SushiHangover 的建议进行了一些更改,但现在没有收到任何错误,但没有显示选项卡式菜单.

I made some changes as suggested by SushiHangover, I now recieve no errors but my tabbed menu is not appearing.

推荐答案

答案是使用相对于要在选项卡式页面中显示的页面的命令参数.

The answer was to use command parameter that is relative to the pages to be displayed in the tabbed page.

<?xml version="1.0" encoding="utf-8"?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
              xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
              prism:ViewModelLocator.AutowireViewModel="True"
              x:Class="BSi.Mobile.Events.Views.MainMasterDetailPage">
<MasterDetailPage.Master>
   <ContentPage Title="Default">
     <StackLayout>
       <StackLayout BackgroundColor="{StaticResource iconGray}" Padding="15"      HeightRequest="100">
         <Image Source="canfitpro_logo2" HeightRequest="60" HorizontalOptions="Start" VerticalOptions="EndAndExpand" />
       </StackLayout>
       <TableView Intent="Form" HasUnevenRows="True">
         <TableRoot>
           <TableSection Title="Vancouver Fitness Expo">
             <ViewCell>
              <StackLayout Margin="15, 10, 10, 10" Orientation="Horizontal">
                 <StackLayout.GestureRecognizers>
                   <TapGestureRecognizer Command="{Binding MenuSelectedCommand}" CommandParameter="EventTabbedPage/NavigationPage/MainPage"/>
                 </StackLayout.GestureRecognizers>
                 <Image Source="icon_home_circle" HeightRequest="40"/>
                 <Label Text="Home" VerticalTextAlignment="Center" Margin="20, 0, 0, 0" Style="{DynamicResource SubtitleStyle}"/>
               </StackLayout>
             </ViewCell>
             <ViewCell>
               <StackLayout Margin="15, 10, 10, 10" Orientation="Horizontal">
                 <StackLayout.GestureRecognizers>
                   <TapGestureRecognizer Command="{Binding MenuSelectedCommand}" CommandParameter="EventTabbedPage/NavigationEventPage"/>
                 </StackLayout.GestureRecognizers>
                 <Image Source="icon_sessions_circle" HeightRequest="40"/>
                 <Label Text="Sessions" VerticalTextAlignment="Center" Margin="20, 0, 0, 0" Style="{DynamicResource SubtitleStyle}"/>
               </StackLayout>
             </ViewCell>
           </TableSection>
           <TableSection Title="Resources">
             <ViewCell>
               <StackLayout Margin="15, 10, 10, 10" Orientation="Horizontal">
                 <StackLayout.GestureRecognizers>
                   <TapGestureRecognizer Command="{Binding MenuSelectedCommand}" CommandParameter="NavigationPage/FloorPlanPage"/>
                 </StackLayout.GestureRecognizers>
                 <Image Source="icon_floormap_circle" HeightRequest="40"/>
                 <Label Text="Floor Plan" VerticalTextAlignment="Center" Margin="20, 0, 0, 0" Style="{DynamicResource SubtitleStyle}"/>
               </StackLayout>
             </ViewCell>
             <ViewCell>
               <StackLayout Margin="15, 10, 10, 10" Orientation="Horizontal">
                 <StackLayout.GestureRecognizers>
                   <TapGestureRecognizer Command="{Binding MenuSelectedCommand}" CommandParameter="NavigationPage/SponsorsPage"/>
                 </StackLayout.GestureRecognizers>
                 <Image Source="icon_partners_circle" HeightRequest="40"/>
                 <Label Text="Sponsor / Media Partners" VerticalTextAlignment="Center" Margin="20, 0, 0, 0" Style="{DynamicResource SubtitleStyle}"/>
               </StackLayout>
             </ViewCell>
             <ViewCell>
               <StackLayout Margin="15, 10, 10, 10" Orientation="Horizontal">
                 <StackLayout.GestureRecognizers>
                   <TapGestureRecognizer Command="{Binding MenuSelectedCommand}" CommandParameter="NavigationPage/FoodNearbyPage"/>
                 </StackLayout.GestureRecognizers>
                 <Image Source="icon_restaurant_circle" HeightRequest="40"/>
                 <Label Text="Where To Eat" VerticalTextAlignment="Center" Margin="20, 0, 0, 0" Style="{DynamicResource SubtitleStyle}"/>
               </StackLayout>
             </ViewCell>
           </TableSection>
         </TableRoot>
       </TableView>
     </StackLayout>
   </ContentPage>
  </MasterDetailPage.Master>
</MasterDetailPage>

这篇关于主详细页面Xamarin中的选项卡式页面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-14 22:03