Win10系列:UWP界面布局基础4
类型转换
前面讲到过,在定义元素时可以通过Attributes特性方式为其设置属性并为属性赋值,在实际开发中所赋予的值可能和属性本身的数据类型不相符,这时XAML解析器就会使用类型转换器(Type Converter)对数据类型进行转换。
XAML中的类型转换是由.Net Framework的内置类型转换器自动实现的,转换过程是:XAML语法解析器首先检查被赋值的属性是否存在相应的内置类型转换器,如果存在,则将属性值字符串转换成对应的.Net类型;如果没有找到相应的内置类型转换器,XAML语法解析器将在元素定义中查找是否使用了标记扩展调用自定义的类型转换器;如果前面两步都没有找到相应的类型转换器,则XAML语法解析器将返回类型转换错误。
在应用程序开发中,经常会用到类型转换器将字符串类型转换为特定的类型对象赋值给元素的属性。例如,向一个页面中添加一个Button按钮,设置Content属性值为"按钮演示",相应的XAML代码片段如下所示:
<Button Content="按钮演示"/>
"按钮演示"是一个字符串类型,XAML语法解析器会将此字符串类型转换为对应的.Net类型,然后赋值给Content属性。
在上面例子的基础上,再设置Button按钮的Foreground属性值为Blue,代码如下所示:
<Button Content="按钮演示" Foreground="Blue"/>
在.Net Framework中,Foreground属性的数据类型是Brush类型,因此XAML语法解析器会使用类型转换器将字符串"Blue"转换为对应的Brush类型,其颜色值为:Red=0、Green=0、Blue=255、Aplha=255,其中Aplha表示透明度。类型转换的后台代码如下所示:
Button sampleButton = new Button { Content = "按钮演示", Foreground = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 0, 0, 255)) };
此外,XAML中也允许开发人员自定义类型转换器,但是该类型转换器要继承于TypeConverter类,并且要重写其中的CanConvertFrom、CanConvertTo、ConvertFrom和ConvertTo方法。
3.2.6 资源字典
资源可以理解为不可执行的数据对象,如图片、视频、音频、文档等,并且在应用程序中可以被重复使用。在XAML语言中,样式、模板、画笔、动画、转换器等都被看做是资源,并通过将这些资源定义在资源字典(Resource Dictionary)中来实现资源共享。
资源字典是一个通过键来管理资源的字典对象,也就是字典中的每个资源都具有一个键来唯一标识该资源。资源字典对应System.Windows命名空间下的ResourceDictionary类,可以被FrameworkElement类和Application类继承。
1. 资源字典的分类
资源的定义位置不同,其有效使用范围也会不同。按照资源的使用范围,资源字典可分为3种类型,分别为直接资源字典、应用程序资源字典和独立资源文件。下面来逐一介绍这三类资源字典。
(1)直接资源字典
在FrameworkElement.Resources属性元素下定义的资源字典被称为直接资源字典。例如,在一个Grid元素下定义资源字典,相应的XAML语法格式如下所示:
<Grid>
<Grid.Resources>
<!--define reourse1-->
<!--define reourse2-->
...
</Grid.Resources>
</Grid>
在Grid.Resources属性元素内定义的每个资源都会有一个x:Name或x:Key属性,这样Grid元素的所有子孙元素就可以通过x:Name或x:Key属性的值来引用相应的资源,实现该Grid范围内的资源共享。
(2)应用程序资源字典
对于一些可在多个页面中重复使用的资源,可以把这些资源定义在Application.Resources属性元素下,相应的XAML语法格式如下所示:
<Application>
<Application.Resources>
<!--define reourse1-->
<!--define reourse2-->
...
</Application.Resources>
</Application>
这样,在Application元素下定义的资源将可以在整个应用程序范围内共享。
(3)独立资源文件
在实际应用开发中,还可以将资源定义在单独的XAML文件中,这些XAML文件被称为资源字典文件。以后,就可以通过资源引用或合并资源字典的方式来使用这些资源,而不需要重复定义。
2. 资源引用
在资源定义之后,可以通过引用资源来为元素的属性提供数据源。在XAML中,可以使用StaticResource标记扩展引用资源,也可以在后台编写代码来引用。
)使用StaticResource标记扩展引用资源
StaticResource标记扩展的作用和使用方法在3.2.4节中已经讲解了,下面通过一个例子来演示如何使用该标记扩展引用资源。在一个打开的Windows应用商店项目中新建一个空白页,并命名为StaticResourcePage。双击打开此页面的StaticResourcePage.xaml文件,在Grid元素中添加如下代码:
<Grid.Resources>
<Style TargetType="Border" x:Key="BorderStyle">
<Setter Property="BorderBrush" Value="Blue"/>
<Setter Property="BorderThickness" Value="4"/>
</Style>
</Grid.Resources>
<Border Style="{StaticResource BorderStyle}" Margin="276,50,717,415"/>
在上面的代码中,先定义了一个键为"BorderStyle"的边框样式资源,在样式中设置边框的颜色为蓝色,边框的粗细为4像素,然后添加了一个Border控件,通过StaticResource标记扩展引用样式资源BorderStyle赋值给Style属性,并使用鼠标将控件拖动到合适的位置。
运行此页面,界面效果如图3-5所示。

图3-5 使用StaticResource标记扩展引用资源的效果
Win10系列:UWP界面布局基础4的更多相关文章
- Win10系列:UWP界面布局基础1
随着技术的不断发展,使用者对应用程序的界面体验提出了更高的要求,为了应对越来越复杂的界面设计需求和有效的简化界面开发过程,微软公司在其应用程序的开发技术当中引入一套新的应用程序界面描述语言,这就是XA ...
- Win10系列:UWP界面布局基础8
路由事件 XAML不仅继承了传统的事件处理方式,还引入了一个增强型事件处理机制:路由事件(RoutedEvent).路由事件和传统事件的不同是:路由事件允许一个对象触发事件后,可以同时拥有多个事件接收 ...
- Win10系列:UWP界面布局基础7
2.附加属性 有一些XAML元素,其自身的属性大多是在其它的元素中声明和使用的,该元素本身却很少使用,这些在其他元素中声明和使用的属性被称为附加属性(Attached Properties).附加属性 ...
- Win10系列:UWP界面布局基础2
属性设置 在面向对象程序开发中,所提及的属性通常指的是对象的属性.在XAML代码中,定义元素时也可以为其设置属性,例如对于一个TextBox元素,有背景属性.宽度属性和高度属性等.为了满足实际应用的需 ...
- Win10系列:UWP界面布局基础12
画刷 画刷(Brush)用于为图形元素填充颜色.在XAML中,画刷有许多属性,其中较常使用的是Fill属性和Stroke属性,Fill用于填充图形的背景色,而Stroke用于设置图形的线条颜色. 在实 ...
- Win10系列:UWP界面布局基础11
样式继承 为了使样式便于维护及重复使用,可以在一个样式上引用其他的样式,这就是样式继承.样式继承的方法是:在Style元素的BasedOn属性上使用StaticResource标记扩展来引用被继承的样 ...
- Win10系列:UWP界面布局基础5
(2)编写后台代码访问资源 下面通过一个例子来演示如何编写后台代码引用资源.新建一个Windows应用商店的空白应用程序项目,将其命名为AccessResourceApplication,打开项目下的 ...
- Win10系列:UWP界面布局基础3
在实际项目开发中,为控件属性赋值时经常会遇到属性值在设计时处于未知状态,而只有在应用程序运行时才能获取到.这种情况下,直接赋值方法是无法满足的,可以使用XAML标记扩展(Markup Extensio ...
- Win10系列:UWP界面布局基础9
在XAML中,样式.模板.画笔和动画等都被看做是资源,它们最终的作用都是相同的,就是让设计人员可以使用这些资源创建更好的视觉效果,对其设计的产品外观进行标准化统一,那么如何使用这些资源并组织和重用呢, ...
随机推荐
- django特殊的标签和过滤器
国际化标签和过滤器 Django还提供了一些模板标签和过滤器,用以控制模板中国际化的每个方面.它们允许对翻译,格式化和时区转换进行粒度控制. 1. i18n 此标签允许在模板中指定可翻译文本.要启用它 ...
- requests:json请求中中文乱码处理
requests库中,在处理json格式的请求时调用的json.dumps方法参数ensure_ascii默认为True.表示序列化时对中文默认使用的ascii编码.如果想要显示中文,则将此参数的值改 ...
- 【转】Qt鼠标键盘事件
http://blog.csdn.net/lovebird_27/article/details/50351336 Qt 程序需要在main()函数创建一个QCoreApplication对象,然后调 ...
- [qt]qstring和string中文支持转换问题
QString str2qstr(const string str) { return QString::fromLocal8Bit(str.data()); } string qstr2str(co ...
- 原生ajax的请求封装get和post
一个完整的AJAX请求包括五个步骤: 1.创建XMLHTTPRequest对象 2.使用open方法创建http请求,并设置请求地址 3.设置发送的数据,开始和服务器端交互 4.注册事件 5.获取响应 ...
- SpringBoot 文件上传、下载、设置大小
本文使用SpringBoot的版本为2.0.3.RELEASE 1.上传单个文件 ①html对应的提交表单 <form action="uploadFile" method= ...
- Codeforces 987 F - AND Graph
F - AND Graph 思路: 首先,x & (~x) == 0 其次,~x 的 子集 y = ((~x) ^ (1<<k)), 0<= k < n(如果k这一位是 ...
- Asp.net core 学习笔记 ( Web Api )
asp.net core 把之前的 webapi 和 mvc 做了结合. mvc 既是 api. 但是后呢,又发现, api 确实有独到之处,所以又开了一些补助的方法. namespace Proje ...
- [MySQL] 中 Schema和Database的区别
在MySQL中,schema和database是同义词. CREATE SCHEMA和CREATE DATABASE是等效的. 但是其他的数据库产品(几乎所有数据库)有所不同.在oracle数据库产品 ...
- Python 编程快速上手 第六章总结
第六章 字符串操作 前言 这一章节讲了关于 Python 中字符串类型的知识.与字符串有关的操作符,方法等等. 处理字符串:字符串的写入.打印.访问的知识 原始字符串 格式:r'string'作用:在 ...