Xamarin.forms 有没有办法从静态资源设置StackLayout或Grid的内容
看看我的XAML,我注意到一些区域基本上是相互重复的,因为我喜欢保持它的整洁,我在想是否有办法减少XAML中的重复代码 所以我想做的是能够设置控件的内容,比如StackLayout、Grid、Frame等 我已经创建了一个页面级资源,但我不确定如何使用它Xamarin.forms 有没有办法从静态资源设置StackLayout或Grid的内容,xamarin.forms,Xamarin.forms,看看我的XAML,我注意到一些区域基本上是相互重复的,因为我喜欢保持它的整洁,我在想是否有办法减少XAML中的重复代码 所以我想做的是能够设置控件的内容,比如StackLayout、Grid、Frame等 我已经创建了一个页面级资源,但我不确定如何使用它 <ContentPage.Resources> <StackLayout x:Key="CommonDetails"> <Label Text="First N
<ContentPage.Resources>
<StackLayout x:Key="CommonDetails">
<Label Text="First Name"/>
<Label Text="Last Name"/>
</StackLayout>
</ContentPage.Resources>
<StackLayout>
<CommonDetails>
<Label Text="Extra Uncommon Data"/>
</StackLayout>
<StackLayout>
<CommonDetails>
<Label Text="Extra Uncommon Data"/>
<Label Text="Extra Uncommon Data"/>
<Label Text="Extra Uncommon Data"/>
</StackLayout>
在参考资料中,您可以定义ControlTemplete:
这里有一个棘手的部分,因为为了使用它,你需要一个ContentView,但是在你的情况下,一个普通的ContentView不能完成这项工作,因为它们只接受一个孩子:你必须创建一个特殊的ContentView,它接受多个视图
您可以按如下方式执行此操作:
//重写ContentProperty允许您
//拥有一个接受多个child的ContentView。
[Xamarin.Forms.ContentPropertyContent]
公共类视图1:ContentView
{
StackLayout contentStack{get;}=新的StackLayout;
公共IList内容{get=>contentStack.Children;}
公众观点1
{
Content=contentStack;
}
}
有了它,剩下的就很简单了,因为在任何页面中,您都可以定义一个定制的ControlTemplate并将其设置为特殊的ContentView,如下所示
就是这样,我觉得这很有用 在参考资料中,您可以定义ControlTemplete:
这里有一个棘手的部分,因为为了使用它,你需要一个ContentView,但是在你的情况下,一个普通的ContentView不能完成这项工作,因为它们只接受一个孩子:你必须创建一个特殊的ContentView,它接受多个视图
您可以按如下方式执行此操作:
//重写ContentProperty允许您
//拥有一个接受多个child的ContentView。
[Xamarin.Forms.ContentPropertyContent]
公共类视图1:ContentView
{
StackLayout contentStack{get;}=新的StackLayout;
公共IList内容{get=>contentStack.Children;}
公众观点1
{
Content=contentStack;
}
}
有了它,剩下的就很简单了,因为在任何页面中,您都可以定义一个定制的ControlTemplate并将其设置为特殊的ContentView,如下所示
就是这样,我觉得这很有用 解决方案1:
您可以使用控制模板
<!-- Grid Template -->
<ControlTemplate x:Key="GridTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<ContentPresenter Grid.Row="0" />
<Label
Grid.Row="1"
BackgroundColor="Accent"
Text="Grid Template" />
</Grid>
</ControlTemplate>
有关代码示例的更多详细信息,您可以查看我以前完成的代码。
解决方案2:
一种简单的方法是使用自定义控件作为模型
您可以在下面的链接中查看示例。
解决方案1:
您可以使用控制模板
<!-- Grid Template -->
<ControlTemplate x:Key="GridTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<ContentPresenter Grid.Row="0" />
<Label
Grid.Row="1"
BackgroundColor="Accent"
Text="Grid Template" />
</Grid>
</ControlTemplate>
有关代码示例的更多详细信息,您可以查看我以前完成的代码。
解决方案2:
一种简单的方法是使用自定义控件作为模型
您可以在下面的链接中查看示例。
我选择这个作为答案,因为后面发布的一个与此非常相似,但是我喜欢这个,因为它解释了如何添加多个视图子项。我很可能只是将它们组合在一个网格或堆栈视图中,以避免使用这个额外的代码,但很高兴将来知道这一点。谢谢我选择这个作为答案,因为后面发布的一个与此非常相似,但是我喜欢这个,因为它解释了如何添加多视图子对象。我很可能只是将它们组合在一个网格或堆栈视图中,以避免使用这个额外的代码,但很高兴将来知道这一点。谢谢