#uwp# XMAL
类型转换
在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
对象元素Rectangle
的Fill
。 (在 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的更多相关文章
- 2019-5-21-win10-uwp-xaml-兼容多个版本条件编译
title author date CreateTime categories win10 uwp xaml 兼容多个版本条件编译 lindexi 2019-5-21 11:19:3 +0800 20 ...
- (UWP开发)基于Windows10 Anniversary SDK创造出位于可视化层的DropShadow
Windows.UI.Composition API是可以从任何通用Windows平台应用程序调用的声明性保留模式API,从而可以直接在应用程序中创建合成对象.动画和效果. Composition A ...
- 我的面板我做主 -- 淘宝UWP中自定义Panel的实现
在Windows10 UWP开发平台上内置的XMAL布局面板包括RelativePanel.StackPanel.Grid.VariableSizedWrapGrid 和 Canvas.在开发淘宝UW ...
- Win10 UWP 开发学习代码(不断更新)
页面之间跳转(传值) string txt = "Spring Lee"; this.Frame.Navigate(typeof(BlankPage1),txt); 另一个页面接收 ...
- UWP开发笔记——嵌套式页面的实现
绪论 UWP开发中,Page是最常用的Control之一,通常情况下,在开发的application中,每一个页面就是一个Page.有时候,为了开发整合度更高,UI表现更为一致的UI,开发者需要把UI ...
- UWP开发-二维变换以及三维变换
在开发中,由于某些需求,我们可能需要做一些平移,缩放,旋转甚至三维变换,所以我来讲讲在UWP中这些变换的实现方法. 一. 二维变换: UIElement.RenderTransform a.Trans ...
- Xamarin.Forms 现已开启对 UWP 的支持
Xamarin.Forms 现已升级到 2.0.0.6482 , 正式开启了对 UWP 的支持. 要创建 UWP 项目, 必须是 VS2015, WIN8.1 下也可以, 但是只有 Windows 1 ...
- [UWP小白日记-8]一些零碎的东西
设置启动窗口大小 直接上代码了没什么好解释的了,既然能设置最小,那铁定就能设置最大 public MainPage() { //设定窗口启动显示大小 ApplicationView.Preferred ...
- [UWP]了解模板化控件(3):实现HeaderedContentControl
1. 概述 来看看这段XMAL: <StackPanel Width="300"> <TextBox Header="TextBox" /&g ...
随机推荐
- 第六章 第一个Linux驱动程序:统计单词个数
现在进入了实战阶段,使用统计单词个数的实例让我们了解开发和测试Linux驱动程序的完整过程.第一个Linux驱动程序是统计单词个数. 这个Linux驱动程序没有访问硬件,而是利用设备文件作为介质与应用 ...
- php 数据库备份、还原
1. mydb.php //DB类 2. backup.php //备份脚本 3. restore.php //还原脚本 mydb.php <? class db{ var $linkid; v ...
- jquery自定义插件——以 选项卡插件为例
一直打算尝试自定义插件,终于付诸实践了,现在把内容发表出来,与大家共勉. 我是根据自己正在用的插件,模仿其源码,实现的自定义插件,完成之后,在网上看相关资料,对自定义插件部分,有了更明确的认识. jq ...
- 自定义jsp标签
1.类: package ===============================; import javax.servlet.jsp.JspTagException; import javax ...
- 一个百万数量级的mysql实例
1.想做数据库调优的学习首先就要有一个较大数据集合的实例,在网上找了很久都没有找到具体的实例,后来在书中看到了employees_db字样,发现 mysql官方提供了一个做测试的较大的数据集,这正是我 ...
- MFC中ClistCtrl的=NM_CUSTOMDRAW消息
=NM_CUSTOMDRAW是你点击列表内部是的消息映射: 例如:我想在我删除一行列表的数据,但是删除后下一行数据继续保持高亮状态 void CChildView::OnDel() { int cou ...
- box-shadow中的理解(bootstrap)
刚研究了bootstrap中css里面的源码,找到了表单(form)中关于输入框的一些设置,根据要求,label标签和input标签需要一起使用,(屏幕阅读器中不能单独辨认input),如需隐藏lab ...
- Freemarker工具类
Freemarker文件模板工具类 提供了解析生成文件.解析生成字符串的两个方法! package org.lunatic.util; import java.io.File; import java ...
- MFC对话框显示BMP图片
1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) ...
- jQuery判断checkbox是否选中的3种方法
方法一:if ($("#checkbox-id")get(0).checked) { // do something} 方法二:if($('#checkbox-id').is ...