以xamarin形式实现可重用元素

时间:2016-09-30 01:02:18

标签: xaml xamarin.forms initializecomponent

我试图在我的xamarin应用中定义可重用的组件。我的目的是在多个文件中使用相同的xaml。例如,我需要为我的应用程序定义公共标题。我尝试按以下方式实现:在单独的文件中定义所需的xaml。使用与在任何其他xaml中重用相关联的类名。

可重复使用的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文件的错误信息:

&#34;名称&#39; InitializeComponent&#39;在当前上下文中不存在&#34;

实现看起来很简单,但我无法确定缺少的内容。 对此有何解决方案? 任何帮助将非常感激。 感谢

2 个答案:

答案 0 :(得分:1)

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" ...

答案 1 :(得分:0)

InitializeComponent();构造函数中删除AppHeaderInitializeComponent()仅由ContentPage s使用。

另外,只是注意到AppHeader XAML中的XML。将XAML更改为此(删除ContentPage中仅需要的所有样板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>