2016-09-30 1 views
0

Iam пытается определить повторно используемые компоненты в моем приложении 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> 

Associated Класс:

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> 

Во время работы приложения, Im получаю следующее сообщение об ошибке для многократного использования файла XAML:

«Имя« InitializeComponent »не существует в текущем контексте»

Реализация выглядит просто, но Im не в состоянии определить, что отсутствует. Любое решение для этого? Любая помощь будет высоко оценена. Thanks

+0

в вашем 'StackLayout' у вас есть атрибут для вашего класса:' х:. класс = «AppHeader» 'Если я не ошибаюсь, вы должны указать полное пространство имен, а также ваше имя класса –

+0

Вы правы. Предоставление полного пространства имен разрешило проблему – user3165999

+0

Позвольте мне обновить ее до ответа, чтобы вы могли ее принять –

ответ

0

В вашей StackLayout у вас есть атрибут для вашего класса:. x:Class="AppHeader" Это должно указать полное имя класса, включая пространство имен . Таким образом, изменить это будет что-то вроде:

<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

Без элементов InitializeComponent() общая страница xaml не будет отображаться – user3165999

+0

Поцарапает это тогда;) –

0

Удалить InitializeComponent(); от вашего AppHeader конструктор. InitializeComponent() используется только ContentPage s.

Кроме того, вы только что заметили, что у вас есть в вашем AppHeader XAML. Перемена XAML на это (удаление всех шаблонный код XAML, который необходим только в ContentPage:

<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