2016-09-30 6 views
0

제 xamarin 응용 프로그램에서 재사용 가능한 구성 요소를 정의하려고합니다. 내 의도는 여러 파일에서 동일한 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> 

관련 클래스 : XAML에서

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

사용

<?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에 의해서만 사용됩니다.

또한 XAML의 AppHeader에있는 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