第七章:XAML vs. code(3)

属性元素语法
这里有一些C#与第4章中的FramedText代码相似。在一个语句中,它实例化一个Frame和一个Label,并将Label设置为Frame的Content属性:

new Frame
{OutlineColor = Color.Accent,HorizontalOptions = LayoutOptions.Center,VerticalOptions = LayoutOptions.Center,Content = new Label{Text = "Greetings, Xamarin.Forms!"}
};

但是当你开始在XAML中复制它时,你可能会在设置Content属性的时候变得有点困难:

<Frame OutlineColor="Accent"HorizontalOptions="Center"VerticalOptions="Center"Content=" what goes here? " />

如何将Content属性设置为整个Label对象?
这个问题的解决方案是XAML语法的最基本特征。 第一步是将Frame标签分成开始标签和结束标签:

<Frame OutlineColor="Accent"HorizontalOptions="Center"VerticalOptions="Center"></Frame>

在这些标签中,添加两个由元素(Frame)和您想要设置的属性(Content)组成的标签,并添加一个句点:

<Frame OutlineColor="Accent"HorizontalOptions="Center"VerticalOptions="Center"><Frame.Content></Frame.Content>
</Frame>

现在把标签放在这些标签中:

<Frame OutlineColor="Accent"HorizontalOptions="Center"VerticalOptions="Center"><Frame.Content><Label Text="Greetings, Xamarin.Forms!" /></Frame.Content>
</Frame>

该语法是如何将Label设置为Frame的Content属性。
您可能想知道这个XAML功能是否违反了XML语法规则。 它不是。 这段时间在XML中没有特殊含义,所以Frame.Content是一个完全有效的XML标签。 然而,XAML强加了关于这些标签的规则:Frame.Content标签必须出现在Frame标签中,并且不能在Frame.Content标签中设置属性。 设置为Content属性的对象显示为这些标记的XML内容。
一旦引入了这个语法,就需要一些术语。 在上面显示的最终XAML代码片段中:

  • 框架和标签是用XML元素表示的C#对象。 它们被称为对象元素。
  • OutlineColor,HorizontalOptions,VerticalOptions和Text是作为XML属性提供的C#属性。 他们被称为财产属性。
  • Frame.Content是以XML元素表示的C#属性,因此称为属性元素。

属性元素在现实生活中很常见。 本章和未来章节中将会看到许多示例,您很快就会发现属性元素成为您使用XAML的第二本质。 但要小心:有时开发人员必须记得太多,以至于我们忘记了基本知识。 即使在您使用XAML一段时间后,您可能会遇到这样的情况,即似乎无法将特定对象设置为特定属性。 解决方案通常是一个属性元素。

您还可以对简单的属性使用属性元素语法,例如:

<Frame HorizontalOptions="Center"><Frame.VerticalOptions>Center</Frame.VerticalOptions><Frame.OutlineColor>Accent</Frame.OutlineColor><Frame.Content><Label><Label.Text>Greetings, Xamarin.Forms!</Label.Text></Label></Frame.Content>
</Frame>

现在,Frame的VerticalOptions和OutlineColor属性以及Label的Text属性都已成为属性元素。 这些属性的值始终是不带引号的属性元素的内容。
当然,将这些属性定义为属性元素没有多大意义。 这是不必要的,一切都很冗长。 但它的工作原理应该如此。
让我们进一步:不是将HorizontalOptions设置为“Center”(对应于静态属性LayoutOptions.Center),您可以将HorizontalOptions表示为属性元素,并将其设置为LayoutOptions值并设置其各个属性:

<Frame><Frame.HorizontalOptions><LayoutOptions Alignment="Center"Expands="False" /></Frame.HorizontalOptions><Frame.VerticalOptions>Center</Frame.VerticalOptions><Frame.OutlineColor>Accent</Frame.OutlineColor><Frame.Content><Label><Label.Text>Greetings, Xamarin.Forms!</Label.Text></Label></Frame.Content>
</Frame>```您还可以将LayoutOptions的这些属性表示为属性元素:

<Frame.HorizontalOptions><LayoutOptions><LayoutOptions.Alignment>Center</LayoutOptions.Alignment><LayoutOptions.Expands>False</LayoutOptions.Expands></LayoutOptions>
</Frame.HorizontalOptions>

`

您不能将属性设置为属性属性和属性元素。 这是设置属性两次,这是不允许的。 请记住,没有其他内容可以出现在属性元素标签中。 设置为属性的值始终是这些标记的XML内容。
现在你应该知道如何在XAML中使用StackLayout。 首先将Children属性表示为属性元素StackLayout.Children,然后将StackLayout的子元素作为属性元素标记的XML内容。 下面是一个例子,第一个StackLayout的每个孩子都是另一个具有水平方向的StackLayout:

<StackLayout><StackLayout.Children><StackLayout Orientation="Horizontal"><StackLayout.Children><BoxView Color="Red" /><Label Text="Red"VerticalOptions="Center" /></StackLayout.Children></StackLayout><StackLayout Orientation="Horizontal"><StackLayout.Children><BoxView Color="Green" /><Label Text="Green"VerticalOptions="Center" /></StackLayout.Children></StackLayout><StackLayout Orientation="Horizontal"><StackLayout.Children><BoxView Color="Blue" /><Label Text="Blue"VerticalOptions="Center" /></StackLayout.Children></StackLayout></StackLayout.Children>
</StackLayout>

每个水平的StackLayout都有一个带有颜色的BoxView和一个带有该颜色名称的标签。
当然,这里的重复标记看起来相当可怕! 如果你想要显示16种颜色怎么办? 还是140? 一开始可能会有很多复制和粘贴成功,但如果您需要稍微改进视觉效果,那么您的状态会很糟糕。 在代码中,您可以在循环中执行此操作,但XAML没有此功能。
当标记威胁过于重复时,您可以随时使用代码。 在XAML中定义一些用户界面而在代码中定义一些用户界面是非常合理的。 但是还有其他的解决方案,你会在后面的章节中看到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QtCreator5.12.6安装图文教程

前言接触过Qt的同学肯定用过QtCreator,本id最近常用&#xff0c;也就写个教程记录一下安装的过程。可能比较少人学过Qt&#xff0c;感觉Qt还是挺不错的&#xff0c;做出来的界面还算好看&#xff0c;关键是跨平台。说明&#xff1a;安装的系统&#xff1a;win10专业版QtCreator…

H.264学习(一)——帧和场的概念

一、何谓场&#xff1f; 每个电视帧都是通过扫描屏幕两次而产生的&#xff0c;第二个扫描的线条刚好填满第一次扫描所留下的缝隙。每个扫描即称为一个场。因此 25 帧/秒的电视画面实际上为 50 场/秒 (若为 NTSC 则分别为 30 & 60 - 因为我是中国人&#xff0c;因此我采用 P…

【实践】js实现随机不重复抽取数组中元素

经过3个星期的时间终于用做完了学校的练习作品了&#xff0c;但是发现在用jq 做互动虽然很方便但却带来了不少的烦恼 所以在以后的日子里我要好好学 js 了&#xff01; 然后呢在博主之前学java 里面 另我最头痛的就是做产生随机不重复的数据了 今天自己再巩固了一下以前的知识再…

RabbitMQ for windows

一、搭建环境 Rabbit MQ 是建立在强大的Erlang OTP平台上&#xff0c;因此安装RabbitMQ之前要先安装Erlang。 erlang&#xff1a;http://www.erlang.org/download.html rabbitmq&#xff1a;http://www.rabbitmq.com/download.html 我目前使用的&#xff1a;http://pan.baidu.c…

圆环内外圆毛刺(凸起)缺口(凹陷)检测halcon

文章目录处理要求处理方法1方法一思路方法一halcon源码处理效果处理方法2方法二思路方法二halcon源码处理效果博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 处理要求 椭圆/圆环&#xff08;产品易变形&#xff0c;为椭圆&#xff09;内外圆…

什么是单播、多播和广播br

什么是单播、多播和广播   “单播”&#xff08;Unicast&#xff09;、“多播”&#xff08;Multicast&#xff09;和“广播”&#xff08;Broadcast&#xff09;这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思&#xff1f;区别何在&#…

【Oracle Database】数据库控制文件管理

移动控制文件 [oraclewallet01 ~]$ sqlplus / as sysdba SQL> set line 200 SQL> col name for a60 SQL> select status,name from v$controlfile;STATUS NAME ------- ------------------------------------------------------------/u01/app/oracle/oradata/wallet…

ADO接口简介

源地址&#xff1a;http://blog.csdn.net/xiaobai1593/article/details/7449151 参考&#xff1a; 1. 百度文库&#xff1a;http://wenku.baidu.com/view/8e2e99ecf8c75fbfc77db230.html 2. CSDN&#xff1a;http://blog.csdn.net/augusdi/article/details/7005597 接口概述&am…

jquery模拟可输入的下拉框

//页面html <div id"select" class"select" ><ul><c:forEach items"${movieCityList}" var"cy" varStatus"st"><li><a href"javascript:void(0)" onclick"selectOption($(this))…

圆环同心度测量halcon

文章目录处理要求处理源码处理结果博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 处理要求 测量圆环同心度 处理源码 read_image (Image, C:/Users/22967/Desktop/图像Barrel 20201024/201024 手机行业 摄像头检测/Barrel 背光/Pic_2020_…

IP组播与组播协议

IP组播与组播协议 2008-4-27来源:不详 作者:佚名 点击&#xff1a;次在Internet上&#xff0c;多媒体业务诸如&#xff1a;流媒体&#xff0c;视频会议和视频点播等&#xff0c;正在成为信息传送的重要组成部分。点对点传输的单播方式不能适应这一类业务传输特性--单点发送多点…

Spring Cloud的应用程序—上下文服务

2019独角兽企业重金招聘Python工程师标准>>> Spring Boot对于如何使用Spring构建应用程序有一个看法&#xff1a;例如它具有常规配置文件的常规位置&#xff0c;以及用于常见管理和监视任务的端点。Spring Cloud建立在此之上&#xff0c;并添加了一些可能系统中所有…

Xtreme8.0 - Kabloom dp

Xtreme8.0 - Kabloom题目连接&#xff1a; https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/kabloom Description The card game Kabloom is played with multiple decks of playing cards. Players are dealt 2 n cards, face up and arranged in two …

视频编码中封装格式RMVB,AVI,264

常规理解 封装格式&#xff08;也叫容器&#xff09;&#xff0c;就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中&#xff0c;也就是说仅仅是一个外壳&#xff0c;或者大家把它当成一个放视频轨和音频轨的文件夹也可以。说得通俗点&#xff0c;视频轨相当…

halcon圆环完整度检测

文章目录处理要求程序源码处理结果博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 处理要求 查找好的圆环&#xff0c;检测圆环不良 程序源码 read_image (Image, F:/HALCON/圆环完整性检测/6.bmp) rgb1_to_gray (Image, GrayImage) v…

《SAS编程与数据挖掘商业案例》学习笔记之十五

继续《SAS编程与数据挖掘商业案例》读书笔记&#xff0c;本次重点&#xff1a;输出控制 主要内容包含&#xff1a;log窗体输出控制、output窗体输出控制、ods输出控制 1.log窗体输出控制 将日志输出到外部文件 proc printto log "f:\data_model\book_data\chapt9\newlog.t…

[转载]MATLAB movie 函数动态绘图

原文地址&#xff1a;MATLAB movie 函数动态绘图作者&#xff1a;小霖cheeronMATLAB movie 函数动态绘图 电影动画的好处就是&#xff0c;运行一次可以多次播放&#xff0c;甚至可以直接生成avi文件&#xff0c;直接独立与Matlab环境播放。这是其它三种动画制作方法所不具备的。…

圆环划痕检测halcon

文章目录处理要求处理源码处理效果博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 处理要求 查找圆环缺陷 处理源码 read_image (Image, F:/HALCON/圆环划痕处理/10_33221_ba4582f0e88ec79.bmp) rgb3_to_gray (Image, Image, Image, Image…

多播(组播)原理分析

为什么要使用多播:网 卡从网络上接收到目标物理地址对应的所有bit位都为1的数据报时&#xff0c;会收到这条消息并将其上传给驱动程序&#xff0c;网卡的这种工作模式称为广播模式&#xff0c;网卡的缺省工作模式包含直接模式和广播模式。利用这一特性&#xff0c;UDP&#xff…

iftop

在类Unix系统中可以使用top查看系统资源、进程、内存占用等信息。查看网络状态可以使用netstat、nmap等工具。若要查看实时的网络流量&#xff0c;监控TCP/IP连接等&#xff0c;则可以使用iftop。一、iftop是什么&#xff1f;iftop是类似于top的实时流量监控工具。官方网站&…