2016-09-30 26 views
0

xamarinアプリケーションで再利用可能なコンポーネントを定義しようとしています。私の意図は、複数のファイルで同じxamlを使用することです。たとえば、私は自分のアプリケーションのための共通のヘッダーを定義する必要があります。私はこれを次のように実装しようとしました:必要なxamlを別ファイルで定義します。他のxamlで再利用するために関連付けられたクラス名を使用します。再利用可能な要素をxamarin形式で実装する

再利用可能なXAML:

<?xml version="1.0" encoding="utf-8" ?> 

<StackLayout xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="AppHeader" BackgroundColor="White" 
      Spacing="1" 
      VerticalOptions="Start"> 
    <StackLayout Padding="0,10,0,10" 
       BackgroundColor="Blue" 
       Orientation="Horizontal" 
       Spacing="0"> 
     <Label 
     Text="AppName" 
     HorizontalTextAlignment="Center" 
     HorizontalOptions="Center" 
     TextColor="White" 
      ></Label> 
    </StackLayout> 
</StackLayout> 

関連クラス:

public partial class AppHeader : StackLayout 
    { 
     public AppHeader() 
     { 
      InitializeComponent(); 
     } 
    } 

使用XAML

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:common="clr-namespace:MyApp;assembly=MyApp" 
      x:Class="MyApp.SampleView"> 
<StackLayout> 
    <common:AppHeader></common:AppHeader> 
</StackLayout> 
</ContentPage> 

でアプリを実行している間、イムは、再利用可能なXAMLファイルに対して次のエラーを取得:

"名前 'InitializeComponent'は現在のコンテキストに存在しません"

実装は簡単ですが、何が欠落しているかを特定することはできません。 これにはどのような解決策がありますか? ご協力いただければ幸いです。 ありがとう

+0

:だから、何かのようにそれがために編集し' X:。私は間違っていない場合は、クラス=「AppHeaderは、」 'あなたは指定する必要がありますそこにフルネームスペースとクラス名 –

+0

正しいです。完全な名前空間を提供すると、問題が解決しました – user3165999

+0

私はそれを受け入れることができるようにアップグレードしましょう –

答えて

0

をごStackLayout、あなたのクラスの属性があります。x:Class="AppHeader"をこれは、名前空間を含む完全修飾クラス名を指定する必要があります。あなたのクラスの属性を持っているあなたの `StackLayout`で

<StackLayout xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="YouNameSpace.AppHeader" BackgroundColor="White" 
      Spacing="1" 
      VerticalOptions="Start"> 
    <StackLayout Padding="0,10,0,10" ... 
+0

共通xamlページのInitializeComponent – user3165999

+0

そのときに傷つける;) –

0

AppHeaderコンストラクタからInitializeComponent();を削除してください。 InitializeComponent()ContentPageによってのみ使用されます。

また、あなたのAppHeader XAMLにあるXMLに気づいただけです。のみContentPageで必要とされるすべての定型XAML削除する(これにそのXAMLを変更します。で

<StackLayout BackgroundColor="White" 
      Spacing="1" 
      VerticalOptions="Start"> 
    <StackLayout Padding="0,10,0,10" 
       BackgroundColor="Blue" 
       Orientation="Horizontal" 
       Spacing="0"> 
    <Label Text="AppName" 
      HorizontalTextAlignment="Center" 
      HorizontalOptions="Center" 
      TextColor="White"></Label> 
    </StackLayout> 
</StackLayout> 
+0

InitializeComponent()を削除しようとしましたが、共通xamlの要素は表示されません – user3165999

関連する問題