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中,样式.模板.画笔和动画等都被看做是资源,它们最终的作用都是相同的,就是让设计人员可以使用这些资源创建更好的视觉效果,对其设计的产品外观进行标准化统一,那么如何使用这些资源并组织和重用呢, ...
随机推荐
- flutter安装与配置 v1.2.1版本
1---- 上面是下载地址https://flutter.dev/docs/development/tools/sdk/archive#windows 2---- 下载后,解压安装到C盘 3--- 测 ...
- Pytorch Visdom可视化工具
2018-12-04 14:05:49 Visdom是Facebook专门为PyTorch开发的一款可视化工具,其开源于2017年3月.Visdom十分轻量级,但却支持非常丰富的功能,能胜任大多数的科 ...
- 动态规划-填格子问题 Domino and Tromino Tiling
2018-09-01 22:38:19 问题描述: 问题求解: 本题如果是第一看到,应该还是非常棘手的,基本没有什么思路. 不妨先从一种简化的版本来考虑.如果仅有一种砖块,那么,填充的方式如下.
- makefile 里的vpath
https://www.cmcrossroads.com/article/basics-vpath-and-vpath Only missing prerequisites matching the ...
- 雷林鹏分享:XML 简介
XML 简介 XML 被设计用来传输和存储数据. HTML 被设计用来显示数据. 应该掌握的基础知识 在您继续学习之前,需要对以下知识有基本的了解: HTML JavaScript 如果您希望首先学习 ...
- 从fasta中提取或者过滤掉多个序列
Google了一下,现成的工具不多. 自己写代码也可以,就是速度肯定不快,而且每次写也很麻烦. 偶然看到QIIME的filter_fasta.py有这个功能,从name list中提取多个序列. fi ...
- drf 需求案例1
案例: 实现过程: 1. 创建一个项目: django-adim startproject dfr3 2. 创建 一个app homwork python manage.py startapp ...
- appium自动化环境搭建(python语言开发)
简述 1.安装jdk,配置环境变量 2.安装AndroidSDK,配置环境变量 3.安装Python 4.安装Python集成开发环境PyCharm 5.安装node 6.安装appium服务端 7. ...
- 微信小程序地图demo完整
<block wx:for="{{data_2}}" wx:key='index' wx:if="{{data_2.length}}"> <v ...
- dcoker 安装mysql和数据持久化
# mysql 镜像下载 docker pull mysql ( 版本自己选择) # run 服务 docker run --name mysql.5.5 -p 3306:3306 -e MYSQ ...