Xamarin XAML语言教程构建ControlTemplate控件模板
控件模板ControlTemplate
ControlTemplate是从Xamarin.Forms 2.1.0开始被引入的。ControlTemplate被称为控件模板,它将页面的外观和内容进行了分离,从而让开发者可以更方便的创建基于主题的页面。本节将讲解控件模板相关的内容,其中包括构建控件模板以及控件模板的模板绑定等内容。
构建控件模板
控件模板可以在应用程序级别中构建,也可以在页面级别中构建。以下将对这两个构建方式进行讲解。
1.应用程序级别构建
如果开发者要在应用程序级别构建控件模板,首先必须将ResourceDictionary添加到App类中,然后在ResourceDictionary中实现模板的构建。其语法形式如下:
-
<Application>
-
<Application.Resources>
-
<ResourceDictionary>
-
<ControlTemplate x:Key="KeyName">
-
……
-
</ControlTemplate>
-
</ResourceDictionary>
-
</Application.Resources>
-
</Application>
其中,KeyName指定一个字典键,用来指代控件模板。
构建好模板后,我们需要将这个模板控件显示出来,此时就需要可以模板化的视图。在这些视图中都会存在一个ControlTemplate属性。将此属性设置为创建的控件模板后,控件模板就可以进行显示了。在Xamarin.Forms目前只有4个视图包含ControlTemplate属性,这4个视图如下:
-
ContentPage:内容页面
-
ContentView:内容视图
-
TemplatedPage:模板页面
-
TemplatedView:模板视图
【示例14-3:ControlTemplateDemo】下面将在应用程序级别中构建控件模板,实现应用程序主题的切换。具体的操作步骤如下:
(1)打开App.xaml文件,编写代码,实现在应用程序级别中构建控件模板,代码如下:
-
<?xml version="1.0" encoding="utf-8" ?>
-
<Application xmlns="http://xamarin.com/schemas/2014/forms"
-
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
-
x:Class="ControlTemplateDemo.App">
-
<Application.Resources>
-
<ResourceDictionary>
-
<!--构建控件模板-->
-
<ControlTemplate x:Key="TealTemplate">
-
<Grid>
-
<Grid.RowDefinitions>
-
<RowDefinition Height="0.1*" />
-
<RowDefinition Height="0.8*" />
-
<RowDefinition Height="0.1*" />
-
</Grid.RowDefinitions>
-
<Grid.ColumnDefinitions>
-
<ColumnDefinition Width="0.05*" />
-
<ColumnDefinition Width="0.95*" />
-
</Grid.ColumnDefinitions>
-
<BoxView Grid.ColumnSpan="2"
-
Color="Teal" />
-
<Label Grid.Column="1"
-
Text="Knowledge is power."
-
TextColor="White"
-
FontSize="18"
-
VerticalOptions="Center" />
-
<ContentPresenter Grid.Row="1"
-
Grid.ColumnSpan="2" />
-
<BoxView Grid.Row="2"
-
Grid.ColumnSpan="2"
-
Color="Teal" />
-
<Label Grid.Row="2"
-
Grid.Column="1"
-
Text="Xamarin.Froms XAML"
-
TextColor="White"
-
FontSize="18"
-
VerticalOptions="Center" />
-
</Grid>
-
</ControlTemplate>
-
<!--构建控件模板-->
-
<ControlTemplate x:Key="AquaTemplate">
-
<Grid>
-
<Grid.RowDefinitions>
-
<RowDefinition Height="0.1*" />
-
<RowDefinition Height="0.8*" />
-
<RowDefinition Height="0.1*" />
-
</Grid.RowDefinitions>
-
<Grid.ColumnDefinitions>
-
<ColumnDefinition Width="0.05*" />
-
<ColumnDefinition Width="0.95*" />
-
</Grid.ColumnDefinitions>
-
<BoxView Grid.ColumnSpan="2"
-
Color="Aqua" />
-
<Label Grid.Column="1"
-
Text="Knowledge is power."
-
TextColor="Blue"
-
FontSize="18"
-
VerticalOptions="Center" />
-
<ContentPresenter Grid.Row="1"
-
Grid.ColumnSpan="2" />
-
<BoxView Grid.Row="2"
-
Grid.ColumnSpan="2"
-
Color="Aqua" />
-
<Label Grid.Row="2"
-
Grid.Column="1"
-
Text="Xamarin.Froms XAML"
-
TextColor="Blue"
-
FontSize="18"
-
VerticalOptions="Center" />
-
</Grid>
-
</ControlTemplate>
-
</ResourceDictionary>
-
</Application.Resources>
-
</Application>
在此代码中,我们构建了两个控件模板,一个为TealTemplate控件模板,另一为AquaTemplate控件模板。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29597077/viewspace-2141952/
,如需转载,请注明出处,否则将追究法律责任。