(2)编写后台代码访问资源

下面通过一个例子来演示如何编写后台代码引用资源。新建一个Windows应用商店的空白应用程序项目,将其命名为AccessResourceApplication,打开项目下的MainPage.xaml文件,首先定义一个页面级别的按钮样式资源,键为ButtonStyle,在样式中设置按钮的文本颜色为红色,然后在Grid元素内添加一个按钮,设置按钮的名字为SampleButton,内容为"运行后启用样式",字体大小是20像素,并使用鼠标将控件拖动到合适的位置。界面设计的XAML代码如下所示:

<Page

x:Class="AccessResourceApplication.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:local="using:AccessResourceApplication"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

mc:Ignorable="d">

<Page.Resources>

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

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

</Style>

</Page.Resources>

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">

<Button Name="SampleButton" Content="运行后启用样式" FontSize="20" Margin="169,345,0,378"/>

</Grid>

</Page>

接下来,在MainPage构造方法中引用键为"ButtonStyle"的样式资源为SampleButton按钮设置样式,代码片段如下所示:

public MainPage()

{

this.InitializeComponent();

SampleButton.Style = (Style)this.Resources["ButtonStyle"];

}

由于引用的是当前页面中定义的资源,因此在上面代码中直接使用this对象的Resources属性,后面索引上资源的键ButtonStyle来访问该资源,并转换成Style类型赋值给SampleButton按钮的Style属性。

未调试时的效果如图3-6所示。启动调试,后台代码运行,查找键为"ButtonStyle"的样式资源并赋值给按钮的Style属性,使按钮的样式发生了变化,效果如图3-7所示。


图3-6 未运行时的效果 图3-7 启动调试得到的效果

3.资源重用

资源被定义之后,可以在多个对象中使用,就实现了资源重用。在XAML中,可重用的资源有以下几类:

  • 值类型,如字符串,这时重用的资源是该值的副本。
  • 在FrameworkElement.Resources属性元素或ResourceDictionary 元素内定义的资源,如样式、模板、动画等。
  • 某些类的内置共享资源,这些类有:Brush类的所有子类(包括 ImageBrush)和Transform 类的所有子类等。

下面通过一个简单的例子来演示如何进行资源重用。新建一个Windows应用商店的空白应用程序项目,并命名为ShareResourceApplication,双击打开MainPage.xaml文件,首先定义一个页面级别的画刷资源,键为SampleBrush,设置画刷的颜色为红色,然后在Grid元素内添加两个按钮,内容分别为"打开"和"关闭",这两个按钮的文本颜色都引用画刷的颜色。相应的XAML代码如下所示:

<Page

x:Class="ShareResourceApplication.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:local="using:ShareResourceApplication"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

mc:Ignorable="d">

<Page.Resources>

<SolidColorBrush x:Key="SampleBrush" Color="Red"/>

</Page.Resources>

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">

<Button Margin="100" Content="打开" Foreground="{StaticResource SampleBrush}"/>

<Button Margin="200" Content="关闭" Foreground="{StaticResource SampleBrush}"/>

</Grid>

</Page>

在上面代码中,"打开"按钮和"关闭"按钮的Foreground属性都通过StaticResource标记扩展引用键为"SampleBrush"的资源,体现了资源一次定义,重复使用的特性。

启动调试,可以看到"打开"按钮和"关闭"按钮的文本颜色都为红色,效果如图3-8所示。

图3-8 资源重用的效果

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

  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界面布局基础3

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

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

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

随机推荐

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

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

  2. [转][osg]关于PagedLOD 加载卸载机制

    你的PagedLOD 为什么没有卸载 转自:http://bbs.osgchina.org/forum.php?mod=viewthread&tid=7612&highlight=Pa ...

  3. Mac批量转换mp3为caf

    创建一个sh文件,输入如下代码后运行. 遍历文件夹中的mp3然后使用afconvert命令进行转换. #!/bin/bash for i in *.mp3; do afconvert $i " ...

  4. 第 3 章 镜像 - 020 - 搭建本地 Registry

    Docker Hub 虽然非常方便,但还是有些限制,比如: 需要 internet 连接,而且下载和上传速度慢. 上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 reposito ...

  5. Axure 元件焦点的控制

    讲解如何控制光标的位置,主要学习了以下三种场景: 1.点击邮箱或者密码时,光标分别自动定位到email.password的文本框处: 2.还有将密码对应的文本框的内容设置为密码的格式(····) 3. ...

  6. SQLSERVER 和 ORACLE的if not exist 用法

    sql server: if not exists (select 1 from TB_Procedure where Id='2018ZZZ') BEGIN insert into TB_Proce ...

  7. Docker微容器+微服务将颠覆传统的软件架构

    从我的观点看:Docker是一个微容器,一个云计算的微PaaS容器,类似JVM但比其更强大的容器,直接基于Linux内核,支持各种语言,它比VM虚拟机更加轻量,能够在Linux或云计算IaaS等平台上 ...

  8. spring cloud: zuul(五): prefix访问前缀, ignoredServices粗粒度访问, yml不起作用

    路由的前缀 - 问题 zuul.prefix: 我们可以指定一个全局的前缀 strip-prefix: 是否将这个代理前缀去掉 zuul: prefix: /ecom 我的eureka:http:// ...

  9. 字符串hash

    hash[i]=(hash[i-1]*p+idx(s[i]))%mod p和mod取不同的较大的素数

  10. hdu-2419 Boring Game

    http://acm.hdu.edu.cn/showproblem.php?pid=2419 给一个图,预分配点值.随后有三种操作,F u v查询与u联通部分大于等于v的最小的数,没有则返回0,U u ...