文档章节

Xamarin XAML语言教程构建ControlTemplate控件模板

大学霸
 大学霸
发布于 2017/07/12 13:31
字数 675
阅读 12
收藏 0
点赞 0
评论 0

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控件模板。

© 著作权归作者所有

共有 人打赏支持
大学霸
粉丝 247
博文 863
码字总数 556644
作品 0
东城
程序员
XamarinForms教程构建XamarinForms开发环境

构建XamarinForms开发环境 所谓Xamarin.Forms的开发环境,就是指在基本硬件和数字软件的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件,简称SDE。对于任何的程序来说...

大学霸
2016/01/21
41
0
WPF/Silverlight深度解决方案:(十四)重写控件样式

在实际开发应用中,Silverlight默认控件样式并不能满足我们所有的需求,特别是对华丽界面的构造,需要对现有控件进行皮肤重写。WPF/Silverlight中使用xaml描述界面,类似Css,它们同样有Sty...

晨曦之光
2012/03/09
0
0
盘点2015年值得关注的8款跨平台开发工具(界面类)

1.Qt 下载地址 | 中文教程连载 Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用...

百mumu
2016/01/20
109
0
2015年值得关注的8款用户界面新品

1.Qt 下载地址 | 中文教程连载 Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用...

百mumu
2015/12/23
99
0
C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十二)制作精美的Mini地图②

前面章节中讲解的包括对象头像面板、Mini雷达地图等窗体都是位置固定的,在处理起来方式多样且简单;而RPG、SLG、休闲养成等类型的游戏中往往会大量使用到悬浮且可自由拖动的窗体,比如包裹面...

晨曦之光
2012/03/09
0
0
WPF -- 控件模板 (ItemsPanelTemplate)(二)

前面介绍了控件模板的应用和Style的差异,并以ControlTemplate举例,接下来举一个ItemsPanelTemplate的例子: 比如我现在要写一个自定义MessageBox自定义控件,当不同的message类型时会显示不...

qq_23018459
04/11
0
0
Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面

Xamarin.Forms 是一个跨平台的、基于原生控件的UI工具包,开发人员可以轻松的创建适用于 Android,iOS 以及 Windows Phone的用户界面。Xamarin.Forms 通过使用平台的原生控件来渲染用户界面,...

葡萄城控件技术团队
2015/03/10
0
5
WPF模拟Office2010文件菜单的TabControl模板

这是Office2010中的文件菜单点开后的效果。本文我将以强大的WPF(www.itstrike.cn)来实现类似的效果。希望你能有所收获。而不是只拷贝/粘贴代码而已。 开始之前。先把TabControl找个地方放着。...

墙头草
2012/12/04
0
8
Xamarin.Forms探索--使用 Xamarin.Forms 来创建跨平台的用户界面

Xamarin.Forms 是一个跨平台的、基于原生控件的UI工具包,开发人员可以轻松的创建适用于 Android,iOS 以及 Windows Phone的用户界面。与HTML 5 不同的时,Xamarin.Forms 通过使用平台的原生...

葡萄城控件技术团队
2015/03/05
0
0
DevExpress v15.1:其它控件升级

<DevExpress Universal Subscription最新版下载> Windows通用应用程序的UI控件 凭借现在投放在Windows 8 XAML平台上的代码,我们已经为微软的下一代通用应用程序平台Windows 10创建了一个集成...

Miss_Hello_World
2015/09/09
208
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

pbgo: 基于Protobuf的迷你RPC/REST框架

https://www.oschina.net/p/pbgo

chai2010
16分钟前
0
0
rsync工具介绍、常用选项以及通过ssh同步

linux下的文件同步工具 rsync rsync是非常实用的一个同步工具,可以从a机器到b机器传输一个文件,也可以备份数据,系统默认没有这个工具,要使用命令 yum install -y rsync 安装。 rsync的命...

黄昏残影
31分钟前
0
0
OSChina 周四乱弹 —— 表妹要嫁人 舅妈叮嘱……

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @哈哈哈哈哈嗝:一定要听——The Pancakes的单曲《咁咁咁》 《咁咁咁》- The Pancakes 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :...

小小编辑
今天
66
4
流利阅读笔记30-20180719待学习

重磅:让人类得老年痴呆的竟是它? Lala 2018-07-19 1.今日导读 去年奥斯卡最佳动画长片《寻梦环游记》里有一句经典台词:“比死亡更可怕的,是遗忘”。在电影中,年迈的曾祖母会重复说一样的...

aibinxiao
今天
3
0
1.16 Linux机器相互登录

Linux机器之间以密码方式互相登录 运行命令#ssh [ip address],标准命令:#ssh [username]@ip, 如果没有写用户名,则默认为系统当前登录的用户 命令#w查看系统负载,可查看到连接到该主机的...

小丑鱼00
今天
0
0
about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部