web-dev-qa-db-ja.com

Xamarinフォーム:System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました

私はこの問題に苦労しています。ここで作成した単純なクロスプラットフォームページは、XAMLコードです。

<?xml version="1.0" encoding="utf-8" ?>
<CarouselPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
             x:Class="ForTesting.TestPage">
  <Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
  <ContentPage>
    <ContentPage.Padding>
      <OnPlatform x:TypeArguments="Thickness" iOS="0,40,0,0" Android="0,40,0,0" />
    </ContentPage.Padding>
  </ContentPage>
</CarouselPage>

そしてここに同じクロスプラットフォームページクラスがあります:

public partial class TestPage: CarouselPage
    {
        public TestPage()
        {
            InitializeComponent();
            new Label
            {
                Text = "heelow",
                FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label)),
                HorizontalOptions = LayoutOptions.Center
            };
         }
    }

テストのために単純なラベルを作成しましたが、ラベルがなくても機能しません。

このページをMainPage.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"
                  xmlns:local="clr-namespace:ForTesting;Assembly=ForTesting"
                  x:Class="ForTesting.MainPage"
          MasterBehavior="Popover">
  <ContentPage.ToolbarItems>
    <ToolbarItem x:Name="CClick"
                 Text="C :"
                 Order="Primary">
    </ToolbarItem>
  </ContentPage.ToolbarItems>
  <MasterDetailPage.Master>
    <local:MasterPage x:Name="masterPage" />
  </MasterDetailPage.Master>
  <MasterDetailPage.Detail>
    <NavigationPage>
      <x:Arguments>
        <local:TestPage/>
      </x:Arguments>
    </NavigationPage>
  </MasterDetailPage.Detail>
</MasterDetailPage>

そして、このクラスの行で:ForTesting.MainPage.xaml.g.csプログラムを実行しているときにエラーが発生します。

public partial class MainPage : global::Xamarin.Forms.MasterDetailPage {

        [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Forms.Build.Tasks.XamlG", "0.0.0.0")]
        private global::Xamarin.Forms.ToolbarItem CClick;

        [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Forms.Build.Tasks.XamlG", "0.0.0.0")]
        private global::ForTesting.MasterPage masterPage;

        [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Forms.Build.Tasks.XamlG", "0.0.0.0")]
        private void InitializeComponent() {
-->         this.LoadFromXaml(typeof(MainPage));
        }
    }

エラー:

未処理の例外:System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。

また、TestPage.xamlと同じクロスプラットフォームページがありますが、実行すると機能します。

7
BinaryTie

カルーセルページに誤りがあります

<?xml version="1.0" encoding="utf-8" ?>
<CarouselPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
             x:Class="ForTesting.TestPage">
  <Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
  <ContentPage>
    <ContentPage.Padding>
      <OnPlatform x:TypeArguments="Thickness" iOS="0,40,0,0" Android="0,40,0,0" />
    </ContentPage.Padding>
  </ContentPage>
</CarouselPage>

カルーセルページは子を1つだけ持つ必要があり、ContentPageでなければなりません。ラベルとコンテンツページの両方を追加することはできません。この行を削除

 <Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />

カルーセルにラベルとコンテンツの両方を含める場合は、 CarouselView のようなものを使用することをお勧めします。

EDIT 1

サンプルカルーセルプロジェクト を最新のXamarin.Forms(2.2.0.31)で作成しました。iOSでテストし、Androidで動作します。次のことができます。これをスターターとして使用して、バージョンを実装します。このコントロールは、製品版アプリで使用します。

6
kyurkchyan

一般に、XAMLの構文エラーがこの例外として表示される場合があることに気付きました。

5
Wes