资源合并

前面提到过,可以将资源字典定义在单独的XAML文件中,这样的文件被称为资源字典文件。那么,在需要引用文件中的资源时可以通过ResourceDictionary元素的MergedDictionaries属性将资源字典文件合并到指定位置。

例如,要把两个XAML文件ResourceFile1.xaml和ResourceFile2.xaml中的资源字典合并到应用程序的资源字典当中,这时需要打开现有项目中的App.xaml文件,然后把这两个资源字典文件合并到Application节点下,相应的XAML代码片段如下所示:

<Application>

<Application.Resources>

<ResourceDictionary>

<ResourceDictionary.MergedDictionaries>

<ResourceDictionary Source="ResourceFile1.xaml"/>

<ResourceDictionary Source="ResourceFile2.xaml"/>

</ResourceDictionary.MergedDictionaries>

</ResourceDictionary>

</Application.Resources>

</Application>

在上面的代码中,通过ResourceDictionary元素的Source属性指定资源字典文件的URI。这样,资源字典文件ResourceFile1.xaml和ResourceFile2.xaml中的资源将可以在整个应用程序的范围内使用。

3.2.7 依赖项属性和附加属性

在3.2.3节中已经介绍了属性的概念,以及设置元素的属性时常用的方法。本小节将主要介绍XAML中两种典型的属性:依赖项属性和附加属性。

1.依赖项属性

如果属性的值依赖于其他的数据源,那么将这个属性称为依赖项属性。因此,依赖项属性的一个显著特点是属性值依赖于一个或多个数据源,并且这些数据源的提供方式可以不同,例如通过数据绑定提供数据源,或者通过动画、模板、样式等方式提供数据源等。

不过,在对依赖项属性进行赋值时,不同的数据源提供方式控制依赖项属性的优先权是不同的。下面来了解一下动画、模板、样式和数据绑定等方式的优先权级别,如图3-9所示,按照优先级由低到高的顺序将这几类方式进行排序。

图3-9 不同方式的优先级排序

从图中可以看出,动画设置首先得到依赖项属性的控制权;其次是对依赖项属性的一些本地化操作,如本地赋值、数据绑定和资源引用;在没有提供其他任何数据源的情况下,才采用默认赋值方式为依赖项属性赋值。

下面以样式和本地赋值为例,来演示不同的数据源提供方式将如何影响依赖项属性的属性值。

新建一个Windows应用商店的空白应用程序项目,将其命名为DependentAttributeApplication。双击打开MainPage.xaml文件,在Grid元素中添加如下XAML代码片段:

<Grid.Resources>

<Style x:Key="ButtonStyle" TargetType="Button">

<Setter Property="Foreground" Value="Red"/>

<Setter Property="FontSize" Value="24"/>

</Style>

</Grid.Resources>

<Button Content="确定" Style="{StaticResource ButtonStyle}" Margin="100" Height="50"/>

<Button Content="取消" Style="{StaticResource ButtonStyle}" Margin="228,359,0,359" Height="50" Foreground="Yellow" FontSize="14"/>

在上面的代码中,首先定义一个按钮样式资源,键为ButtonStyle,在样式中通过Setter元素设置按钮的文本颜色为红色,字体大小为24像素;然后添加了两个按钮,Content属性值分别为"确定"和"取消",并使用StaticResource标记扩展引用键为"ButtonStyle"的样式资源分别赋值给这两个按钮的Style属性,同时还通过本地赋值方式设置"取消"按钮的文本颜色为黄色,字体大小为14像素。

启动调试,可以看到"确定"按钮采用了样式ButtonStyle,生成了相应的外观效果,而"取消"按钮的Forground和FontSize属性的数据源提供方式中,本地赋值优先于控件样式,因采用本地赋值而生成了不同的外观,效果如图3-10所示。。

图3-10 不同的数据源提供方式对属性值产生的影响

Win10系列:UWP界面布局基础6的更多相关文章

  1. Win10系列:UWP界面布局基础1

    随着技术的不断发展,使用者对应用程序的界面体验提出了更高的要求,为了应对越来越复杂的界面设计需求和有效的简化界面开发过程,微软公司在其应用程序的开发技术当中引入一套新的应用程序界面描述语言,这就是XA ...

  2. Win10系列:UWP界面布局基础8

    路由事件 XAML不仅继承了传统的事件处理方式,还引入了一个增强型事件处理机制:路由事件(RoutedEvent).路由事件和传统事件的不同是:路由事件允许一个对象触发事件后,可以同时拥有多个事件接收 ...

  3. Win10系列:UWP界面布局基础7

    2.附加属性 有一些XAML元素,其自身的属性大多是在其它的元素中声明和使用的,该元素本身却很少使用,这些在其他元素中声明和使用的属性被称为附加属性(Attached Properties).附加属性 ...

  4. Win10系列:UWP界面布局基础4

    类型转换 前面讲到过,在定义元素时可以通过Attributes特性方式为其设置属性并为属性赋值,在实际开发中所赋予的值可能和属性本身的数据类型不相符,这时XAML解析器就会使用类型转换器(Type C ...

  5. Win10系列:UWP界面布局基础2

    属性设置 在面向对象程序开发中,所提及的属性通常指的是对象的属性.在XAML代码中,定义元素时也可以为其设置属性,例如对于一个TextBox元素,有背景属性.宽度属性和高度属性等.为了满足实际应用的需 ...

  6. Win10系列:UWP界面布局基础12

    画刷 画刷(Brush)用于为图形元素填充颜色.在XAML中,画刷有许多属性,其中较常使用的是Fill属性和Stroke属性,Fill用于填充图形的背景色,而Stroke用于设置图形的线条颜色. 在实 ...

  7. Win10系列:UWP界面布局基础11

    样式继承 为了使样式便于维护及重复使用,可以在一个样式上引用其他的样式,这就是样式继承.样式继承的方法是:在Style元素的BasedOn属性上使用StaticResource标记扩展来引用被继承的样 ...

  8. Win10系列:UWP界面布局基础5

    (2)编写后台代码访问资源 下面通过一个例子来演示如何编写后台代码引用资源.新建一个Windows应用商店的空白应用程序项目,将其命名为AccessResourceApplication,打开项目下的 ...

  9. Win10系列:UWP界面布局基础3

    在实际项目开发中,为控件属性赋值时经常会遇到属性值在设计时处于未知状态,而只有在应用程序运行时才能获取到.这种情况下,直接赋值方法是无法满足的,可以使用XAML标记扩展(Markup Extensio ...

  10. Win10系列:UWP界面布局基础9

    在XAML中,样式.模板.画笔和动画等都被看做是资源,它们最终的作用都是相同的,就是让设计人员可以使用这些资源创建更好的视觉效果,对其设计的产品外观进行标准化统一,那么如何使用这些资源并组织和重用呢, ...

随机推荐

  1. N的阶乘(10000) 51 nod——1057 (大数)

    像这些大整数加法或者乘法什么的思想都一样,就是截位存取,累积进位,最后逆序输出就可以啦 PS:小生是用10000来存取的,300MS就能A,如果单个存取有点危险,题目时间限制好像是1000ms,大家可 ...

  2. Java中的单实例

    前几天刚学完单实例设计模式,今天看代码时发现一行代码很奇怪,getRuntime()函数的返回类型怎么是它本身,忽然想起前几天学的单实例模式,于是找到方法的定义,果然是静态私有变量,获取实例的公有方法 ...

  3. HttpClient的POST请求返回302解决

    HttpClient请求POST提示302,而且返回的response中的Localtion是我访问时使用的URL, 例如:我使用的URL是https://bbs.csdn.net?client_id ...

  4. python特殊成员函数

    1.__init__():构造函数 2.__del__():析构函数 3.print(__doc__):打印描述信息 4.print(Dog.__module__):类来自的模块 5.print(d1 ...

  5. Android SDK开发

    目前我们的应用内使用了 ArcFace 的人脸检测功能,其他的我们并不了解,所以这里就和大家分享一下我们的集成过程和一些使用心得 集成 ArcFace FD 的集成过程非常简单 在 ArcFace F ...

  6. 认识flask框架

    1.框架的基本认识: 特点:用Python语言实现的轻量.简洁.扩展性强. 核心:werkzeug和Jinja2 2.虚拟环境: 创建:mkvirtualenv -p python3 名称 进入:wo ...

  7. You Don't Know JS: Scope & Closures (第一章:什么是Scope)

    Content What is Scope? Lexical Scope Function Vs. Block Scope Hoisting Scope Closures Appendix: Dyna ...

  8. 并查集-解决区间和纠错问题 hdu-3038

    题目:多次给出信息,告诉你[a,b]区间的和,求多少个错误信息(错误信息不考虑). 乍一看有点像线段树,但想想就发现这个并不能用线段树方便地解决.后来经提醒是并查集的一种经典题型. 把区间抽象为并查集 ...

  9. android -------- Data Binding的使用 ( 五) include

    Data Binding的中 include 标签的使用 inclune使用和原来一样,但要如何使数据也在 include中使用呢? 先看看我的布局文件 include的布局文件,也要使用 <l ...

  10. mysql之filesort原理

    在执行计划中,可能经常看到有Extra列有filesort,这就是使用了文件排序,这当然是不好的,应该优化,但是,了解一下他排序的原理也许很有帮助,下面看一下filesort的过程: 1.根据表的索引 ...