类型转换

在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>

最新文章

  1. Linux SVN 命令详解
  2. three.js加载obj模型
  3. 如何控制JVM中的JIT行为?
  4. [教程]Oracle 11g Express 安装和使用教程
  5. 【译】UI设计基础(UI Design Basics)--为iOS设计(Design for iOS)(二)
  6. linux 定时执行任务
  7. Flex的学习资源
  8. 运行jar包
  9. 树型权限管理插件:jQuery Tree Multiselect详细使用指南
  10. Tomcat配置(二):tomcat配置文件server.xml详解和部署简介
  11. SpringBoot idea maven打包war
  12. JVM学习--(六)类加载器原理
  13. #if和#ifdef的区别
  14. HTML5 前端将 dom 元素转化为 Word,EXCEL 或者图片 并实现下载
  15. git取别名配置
  16. 初始easyUI
  17. VBA汇总同目录下的所有工作簿数据到另一个工作簿,并进行统计
  18. libRTMP 整体说明
  19. 推荐一款好用的文件/文件夹对比工具 —— Beyond Compare
  20. python中列表和元组的操作(结尾格式化输出小福利)

热门文章

  1. 浅谈 Struts2 面试题收藏
  2. ajax 中boolean值技巧
  3. (l老陈-小石头)典型用户、用户故事、用例图
  4. 克隆虚拟机重启服务时 Error:No suitable device found: no device found for connection &quot;System eth0&quot;
  5. What is the DD in java web application
  6. ray与triangle/quad求交二三事
  7. Java中的Exception
  8. DataGridview 自动切换到 下一行
  9. Cosh.1
  10. ARM汇编