我有自定义StackLayout
public partial class CustomView : StackLayout
{
public CustomView()
{
InitializeComponent();
}
}
和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="XamlSample.CustomView"
Orientation="Vertical"
VerticalOptions="FillAndExpand">
<StackLayout x:Name="FirstContainer"
Orientation="Horizontal"
HeightRequest="40"
Spacing="0">
</StackLayout>
<StackLayout x:Name="SecondContainer"
BackgroundColor="Red">
</StackLayout>
</StackLayout>
这个想法是在xaml中使用这个布局,像这样的子元素
<custom:CustomView>
<StackLayout x:Name="FirstChild"
VerticalOptions="FillAndExpand"
BackgroundColor="Transparent">
</StackLayout>
<StackLayout x:Name="SecondChild"
VerticalOptions="FillAndExpand"
BackgroundColor="Green">
</StackLayout>
</custom:CustomView>
但我需要的主要事情是FirstChild应该是FirstContainer的孩子,而SecondChild应该是SecondContainer的孩子。这样我就可以在CustomView中处理子元素的位置并使用xaml。 我知道如何使用它背后的代码制作我想要的东西非常简单,但在这种情况下,我需要将大量的xaml元素迁移到后面的代码中。
答案 0 :(得分:2)
你可以试试这个:
的Xaml
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MonRdvEnLigne.Common.Views.Xaml.CustomStackLayout">
<ContentView.Content>
<StackLayout>
<StackLayout x:Name="FirstChild"
VerticalOptions="FillAndExpand"
BackgroundColor="Transparent">
</StackLayout>
<StackLayout x:Name="SecondChild"
VerticalOptions="FillAndExpand"
BackgroundColor="Green">
</StackLayout>
</StackLayout>
</ContentView.Content>
</ContentView>
并且
[ContentProperty("Elements")]
public partial class CustomStackLayout : ContentView
{
public CustomStackLayout()
{
InitializeComponent();
}
public IEnumerable<View> Elements { get; set; }
}