在 xamarin 表单中实现可重用元素
Implement Reusable elements in xamarin forms
我正在尝试在我的 xamarin 应用程序中定义可重用组件。我的意图是在多个文件中使用相同的 xaml。例如,我需要为我的应用程序定义 common header。我试图通过以下方式实现这一点:在单独的文件中定义必需的 xaml。使用关联的 class 名称在任何其他 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>
关联 Class :
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 文件的错误:
"The name 'InitializeComponent' does not exist in the current context"
实现看起来很简单,但我无法确定缺少什么。
有什么解决办法吗?
任何帮助将非常感激。
谢谢
从 AppHeader
构造函数中删除 InitializeComponent();
。 InitializeComponent()
仅供 ContentPage
s 使用。
此外,刚刚注意到 XML 您在 AppHeader
XAML 中。将 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>
在您的 StackLayout
中,您的 class 有一个属性:x:Class="AppHeader"
。这应该指定完全限定的 class 名称,包括命名空间。所以将其编辑为:
<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" ...
我正在尝试在我的 xamarin 应用程序中定义可重用组件。我的意图是在多个文件中使用相同的 xaml。例如,我需要为我的应用程序定义 common header。我试图通过以下方式实现这一点:在单独的文件中定义必需的 xaml。使用关联的 class 名称在任何其他 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>
关联 Class :
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 文件的错误:
"The name 'InitializeComponent' does not exist in the current context"
实现看起来很简单,但我无法确定缺少什么。 有什么解决办法吗? 任何帮助将非常感激。 谢谢
从 AppHeader
构造函数中删除 InitializeComponent();
。 InitializeComponent()
仅供 ContentPage
s 使用。
此外,刚刚注意到 XML 您在 AppHeader
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>
在您的 StackLayout
中,您的 class 有一个属性:x:Class="AppHeader"
。这应该指定完全限定的 class 名称,包括命名空间。所以将其编辑为:
<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" ...