我的应用程序包含被以下内容包围的对象:
<StackLayout HeightRequest="49" BackgroundColor="Red" Orientation="Vertical" Margin="0" >
<Grid VerticalOptions="CenterAndExpand">
<!-- XAML here -->
</Grid>
</StackLayout>
我想这样做,这样就不必每次都在第一行,第二行,最后一行和最后一行的末尾输入XAML。
我可以使用类似控件模板的方法来避免这样做吗?如果可以,我将如何使用它?
答案 0 :(得分:0)
是的,Xamarin还提供XAML中的控制模板功能。
在App.xaml中编写以下代码
<Application.Resources>
<ResourceDictionary>
<ControlTemplate x:Key="TealTemplate">
<Grid>
<Label Text="Control Template Demo App"
TextColor="White"
VerticalOptions="Center" />
</ControlTemplate>
</ResourceDictionary>
</Application.Resources>
在ContentPage侧面调用模板
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="SimpleTheme.HomePage">
<ContentView x:Name="contentView" Padding="0,20,0,0"
ControlTemplate="{StaticResource TealTemplate}">
<StackLayout VerticalOptions="CenterAndExpand">
<Label Text="Welcome to the app!" HorizontalOptions="Center" />
<Button Text="Change Theme" Clicked="OnButtonClicked" />
</StackLayout>
</ContentView>
</ContentPage>
答案 1 :(得分:0)
您将需要使用ContentPresenter
和ControlTemplate
的组合(如numpy.choose
的注释中所述)
在
ContentPage
(或ContentView
)上,可以分配Content
属性,也可以设置ControlTemplate
属性。发生这种情况时,如果ControlTemplate
包含一个ContentPresenter
实例,则分配给Content
属性的内容将由ContentPresenter
在ControlTemplate
中呈现。 / p>
<ControlTemplate x:Key="DefaultTemplate">
<StackLayout HeightRequest="49" BackgroundColor="Red"
Orientation="Vertical" Margin="0">
<Grid VerticalOptions="CenterAndExpand">
<ContentPresenter /> <!-- This line is replaced by actual content -->
</Grid>
</StackLayout>
</ControlTemplate>
用法:
<ContentView ControlTemplate="{StaticResource DefaultTemplate}">
<!-- XAML here (basically the view that is to be surrounded by above layout) -->
<Label TextColor="Yellow" Text="I represent the content" />
</ContentView>