私はこの問題に苦労しています。ここで作成した単純なクロスプラットフォームページは、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と同じクロスプラットフォームページがありますが、実行すると機能します。
カルーセルページに誤りがあります
<?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で動作します。次のことができます。これをスターターとして使用して、バージョンを実装します。このコントロールは、製品版アプリで使用します。
一般に、XAMLの構文エラーがこの例外として表示される場合があることに気付きました。