Xamarin.forms 有没有办法从静态资源设置StackLayout或Grid的内容

Xamarin.forms 有没有办法从静态资源设置StackLayout或Grid的内容,xamarin.forms,Xamarin.forms,看看我的XAML,我注意到一些区域基本上是相互重复的,因为我喜欢保持它的整洁,我在想是否有办法减少XAML中的重复代码 所以我想做的是能够设置控件的内容,比如StackLayout、Grid、Frame等 我已经创建了一个页面级资源,但我不确定如何使用它 <ContentPage.Resources> <StackLayout x:Key="CommonDetails"> <Label Text="First N

看看我的XAML,我注意到一些区域基本上是相互重复的,因为我喜欢保持它的整洁,我在想是否有办法减少XAML中的重复代码

所以我想做的是能够设置控件的内容,比如StackLayout、Grid、Frame等

我已经创建了一个页面级资源,但我不确定如何使用它

<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:

一种简单的方法是使用自定义控件作为模型

您可以在下面的链接中查看示例。

我选择这个作为答案,因为后面发布的一个与此非常相似,但是我喜欢这个,因为它解释了如何添加多个视图子项。我很可能只是将它们组合在一个网格或堆栈视图中,以避免使用这个额外的代码,但很高兴将来知道这一点。谢谢我选择这个作为答案,因为后面发布的一个与此非常相似,但是我喜欢这个,因为它解释了如何添加多视图子对象。我很可能只是将它们组合在一个网格或堆栈视图中,以避免使用这个额外的代码,但很高兴将来知道这一点。谢谢