类型转换

在xaml中对属性赋值时,会将填入的字符串转换成对应的属性类型。比如:

  • <Button Visibility="Visible" /> 会将Visible这个字符串转换成一个枚举值
  • <Button Content="按钮演示" Foreground=“Blue”/> Foreground属性的数据类型是Brush,通过SolidColorBrush对Color进行赋值,在以上代码中,XAML语法解析器需要使用类型转换器(Type Converters)将简单文本字符串“Blue”,转换为对应的“Brush”画刷类型,其颜色值为Red=0,Green=0,Blue=255,Aplha=255。 对应后台代码类型转换是:
Button button = new Button {
Foreground = new SolidColorBrush(Color.FromArgb(0, 0, 255, 255))
};

转换过程主要是以下两个步骤:

  • XAML语法解析器会检查需要赋值的属性是否存在内置类型转换器。如果发现对应类型转换器,则将属性字符串转换为对应.Net类型
  • 如果没有发现内置类型转换器,XAML语法解析器将查找元素对象中是否使用标记扩展调用自定义类型转换器
  • 如果以上两个步骤都没有发现对应类型转起的存在,XAML语法解析器将返回类型错误

XAML命名空间

<Page
x:Class="Application1.BlankPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
  • xmlns:XAML文件几乎总是在其根元素中声明一个默认 XAML 命名空间。 默认 XAML命名空间定义了无需使用前缀限定即可声明的元素。 对于典型的 Windows 运行时应用项目,此默认命名空间包含用于 UI 定义的所有 Windows 运行时的内置 XAML 词汇:默认控件、文本元素、XAML图形和动画、数据绑定和样式支持类型等。
  • xmlns:x定义xaml的所有通用规则
  • x:Class为XAML页面指定对应代码隐藏文件的命名空间和类名

使用属性元素语法设置属性

一个对象的许多属性可使用属性元素语法设置。

属性元素看上去如下所示:<object.property>

在下面的语法中,property是你想要设置的属性的名称,propertyValueAsObjectElement是应当满足属性的值类型要求的单个对象元素。

<object>
<object.属性>
propertyValueAsObjectElement
</object.属性>
</object>

下面的示例使用属性元素语法来设置一个具有SolidColorBrush对象元素RectangleFill。 (在 SolidColorBrush 内,Color被设置为一个属性。)此 XAML 的分析结果等同于前面使用属性语法设置 Fill 的 XAML 示例。

<Rectangle
Name="rectangle1"
Width="100"
Height="100"
>
<Rectangle.Fill>
<SolidColorBrush Color="Blue"/>
</Rectangle.Fill>
</Rectangle>

使用集合语法设置属性

在 XAML 中,有几个集合语法的变体。这一眼看上去似乎允许您“设置”只读集合属性。而实际上,XAML 允许的操作是向现有集合中添加项。实现 XAML 支持的 XAML 语言和 XAML 处理器依赖于后备集合类型中的约定来启用此语法。

当 XAML 处理器遇到 XAML集合语法中的一个或多个对象元素时,首先通过使用其对象标记创建每个此类对象,然后通过调用集合的 Add 方法以声明顺序将每个新对象添加到包含集合中。

下面的示例演示了一个使用可构造集合类型的集合属性(可以定义实际的集合并将其实例化为 XAML 中的一个对象元素)。

<LinearGradientBrush>
<LinearGradientBrush.GradientStops>
<!-- Here the GradientStopCollection tag is specified. -->
<GradientStopCollection>
<GradientStop Offset="0.0" Color="Red" />
<GradientStop Offset="1.0" Color="Blue" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>

不过,对于采用集合的 Windows Phone 属性而言,XAML分析器可根据集合所属的属性隐式知道集合的后备类型。因此,可以省略集合本身的对象元素,如下面的示例所示。

<LinearGradientBrush>
<LinearGradientBrush.GradientStops>
<!-- no explicit new GradientStopCollection, parser knows how to find or create -->
<GradientStop Offset="0.0" Color="Red" />
<GradientStop Offset="1.0" Color="Blue" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>

另外,有一些属性不但是集合属性,还标识为类的 XAML 内容属性。前面示例中以及许多其他 Windows Phone 属性中使用的GradientStops属性就是这种情况。在这些语法中,也可以省略属性元素。这生成以下标记:

<LinearGradientBrush>
<GradientStop Offset="0.0" Color="Red" />
<GradientStop Offset="1.0" Color="Blue" />
</LinearGradientBrush>

#uwp# XMAL的更多相关文章

  1. 2019-5-21-win10-uwp-xaml-兼容多个版本条件编译

    title author date CreateTime categories win10 uwp xaml 兼容多个版本条件编译 lindexi 2019-5-21 11:19:3 +0800 20 ...

  2. (UWP开发)基于Windows10 Anniversary SDK创造出位于可视化层的DropShadow

    Windows.UI.Composition API是可以从任何通用Windows平台应用程序调用的声明性保留模式API,从而可以直接在应用程序中创建合成对象.动画和效果. Composition A ...

  3. 我的面板我做主 -- 淘宝UWP中自定义Panel的实现

    在Windows10 UWP开发平台上内置的XMAL布局面板包括RelativePanel.StackPanel.Grid.VariableSizedWrapGrid 和 Canvas.在开发淘宝UW ...

  4. Win10 UWP 开发学习代码(不断更新)

    页面之间跳转(传值) string txt = "Spring Lee"; this.Frame.Navigate(typeof(BlankPage1),txt); 另一个页面接收 ...

  5. UWP开发笔记——嵌套式页面的实现

    绪论 UWP开发中,Page是最常用的Control之一,通常情况下,在开发的application中,每一个页面就是一个Page.有时候,为了开发整合度更高,UI表现更为一致的UI,开发者需要把UI ...

  6. UWP开发-二维变换以及三维变换

    在开发中,由于某些需求,我们可能需要做一些平移,缩放,旋转甚至三维变换,所以我来讲讲在UWP中这些变换的实现方法. 一. 二维变换: UIElement.RenderTransform a.Trans ...

  7. Xamarin.Forms 现已开启对 UWP 的支持

    Xamarin.Forms 现已升级到 2.0.0.6482 , 正式开启了对 UWP 的支持. 要创建 UWP 项目, 必须是 VS2015, WIN8.1 下也可以, 但是只有 Windows 1 ...

  8. [UWP小白日记-8]一些零碎的东西

    设置启动窗口大小 直接上代码了没什么好解释的了,既然能设置最小,那铁定就能设置最大 public MainPage() { //设定窗口启动显示大小 ApplicationView.Preferred ...

  9. [UWP]了解模板化控件(3):实现HeaderedContentControl

    1. 概述 来看看这段XMAL: <StackPanel Width="300"> <TextBox Header="TextBox" /&g ...

随机推荐

  1. 《C++primer》v5 第6章 函数 读书笔记 习题答案

    6.1 实参是在函数调用处填写的参数.形参是在函数体使用的参数. 实参是形参的初始值. 具体参见:http://blog.163.com/zhengguo_li/blog/static/7030148 ...

  2. 微信公众账号 Senparc.Weixin.MP SDK 开发教程 索引

    Senparc.Weixin.MP SDK从一开始就坚持开源的状态,这个过程中得到了许多朋友的认可和支持. 目前SDK已经达到比较稳定的版本,这个过程中我觉得有必要整理一些思路和经验,和大家一起分享. ...

  3. jquery 甘特图开发指南

    JQuery.Gantt是一个开源的基于JQuery库的用于实现甘特图效果的可扩展功能的JS组件库. <link rel="stylesheet" href="cs ...

  4. 关于在工程中添加新文件时的LNK2019错误的一个解决办法

    我这几天一直在研究Qt的串口程序,在读懂了官方给出的实例程序后我决定把其多线程的串口监视程序加入到我自己的工程中,便直接把问价复制到自己的工程下面,在Qt中加入到自己的工程中,但是总是出现LNK201 ...

  5. 向通知栏发送通知点击跳转并传递数据(PendingIntent)传递数据

    // 为发送通知的按钮的点击事件定义事件处理方法 public void send() {///// 第一步:获取NotificationManager NotificationManager nm ...

  6. PHP 爬取网页中表格数据

    public function spider_j($page) { $url="http://aaa/bbb".$page."_0/"; $fcontents= ...

  7. Photoshop的评价

    Photoshop是Adobe公司旗下最为出名的图像处理软件之一. Photoshop的功能性:主要处理以像素所构成的数字图象.使用其众多的编修与绘图工具,可以有效地进行图片编辑工作.支持Window ...

  8. Java高级规范之三

    三十一.如果变量名要加注释,说明命名不是很准确. 不规范示例:暂无 规范实例:暂无 解析:暂无 三十二.任何类字段除非必要,否则都要私有化 不规范示例: public class Person{ St ...

  9. 托管到github上的网页图片在百度浏览器中显示不全

    这几天做了个较完整的网页放到github上,上传后看网页效果. 在Firefox浏览器中,显示正常. 在百度浏览器中,空了一大块位置(图片位置),偏偏只空了这一块,其它地方的图片都好好的. 点击f12 ...

  10. linux sed的使用

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理, 可以将数据行进行替换.删除.新增.选取等特定工作. sed本质上是一个编辑器,但是它是非交互式的,这点与VIM不同:同时 ...