Win10系列:UWP界面布局基础5
(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的更多相关文章
- Win10系列:UWP界面布局基础1
随着技术的不断发展,使用者对应用程序的界面体验提出了更高的要求,为了应对越来越复杂的界面设计需求和有效的简化界面开发过程,微软公司在其应用程序的开发技术当中引入一套新的应用程序界面描述语言,这就是XA ...
- Win10系列:UWP界面布局基础8
路由事件 XAML不仅继承了传统的事件处理方式,还引入了一个增强型事件处理机制:路由事件(RoutedEvent).路由事件和传统事件的不同是:路由事件允许一个对象触发事件后,可以同时拥有多个事件接收 ...
- Win10系列:UWP界面布局基础7
2.附加属性 有一些XAML元素,其自身的属性大多是在其它的元素中声明和使用的,该元素本身却很少使用,这些在其他元素中声明和使用的属性被称为附加属性(Attached Properties).附加属性 ...
- Win10系列:UWP界面布局基础4
类型转换 前面讲到过,在定义元素时可以通过Attributes特性方式为其设置属性并为属性赋值,在实际开发中所赋予的值可能和属性本身的数据类型不相符,这时XAML解析器就会使用类型转换器(Type C ...
- Win10系列:UWP界面布局基础2
属性设置 在面向对象程序开发中,所提及的属性通常指的是对象的属性.在XAML代码中,定义元素时也可以为其设置属性,例如对于一个TextBox元素,有背景属性.宽度属性和高度属性等.为了满足实际应用的需 ...
- Win10系列:UWP界面布局基础12
画刷 画刷(Brush)用于为图形元素填充颜色.在XAML中,画刷有许多属性,其中较常使用的是Fill属性和Stroke属性,Fill用于填充图形的背景色,而Stroke用于设置图形的线条颜色. 在实 ...
- Win10系列:UWP界面布局基础11
样式继承 为了使样式便于维护及重复使用,可以在一个样式上引用其他的样式,这就是样式继承.样式继承的方法是:在Style元素的BasedOn属性上使用StaticResource标记扩展来引用被继承的样 ...
- Win10系列:UWP界面布局基础3
在实际项目开发中,为控件属性赋值时经常会遇到属性值在设计时处于未知状态,而只有在应用程序运行时才能获取到.这种情况下,直接赋值方法是无法满足的,可以使用XAML标记扩展(Markup Extensio ...
- Win10系列:UWP界面布局基础9
在XAML中,样式.模板.画笔和动画等都被看做是资源,它们最终的作用都是相同的,就是让设计人员可以使用这些资源创建更好的视觉效果,对其设计的产品外观进行标准化统一,那么如何使用这些资源并组织和重用呢, ...
随机推荐
- zzulioj 1206 字符串的修改 (字符串修改)
不难,理解一下直接过,代码如下: #include<stdio.h> #include<string.h> #include<math.h> #include< ...
- SQL中的float类型的数据
问题1. 如何在SQL中默认的使用float类型的数据 SQL中想要通过计算的方式最快的得到一个float类型的数据,只需要运算的其中一个值后面加上小数点就ok. 比如 :9/2=4 但是 :9/2 ...
- Http请求处理流程 管道流程 MVC扩展HttpModule
HttpApplication 封装了管道处理请求的所有事件 HttpModule 对HttpApplication中事件的扩展 HttpHandler 处理程序 每个请求都要经过Handle ...
- C# DataTable 通过Linq分组
datatable我们是经常使用到的,但是需要对数据进行分组,具体代码如下: var result = dt.AsEnumerable().GroupBy(f => new { type = f ...
- MATLAB程序控制结构
- 几种RAID介绍(总结)
概念 RAID是Redundent Array of Inexpensive Disks的缩写,简称为“磁盘阵列”.后来RAID中的字母I被改作了Independent,RAID就成了“独立冗余磁盘阵 ...
- C# 读取word2003 并且显示在界面上的方法
1.新建一个windows窗体程序 2. 引入包WinWordControl.dll 3.添加引用 4.引入组件WinWordControl组件 5.主界面上加入按钮 ,opendialog, win ...
- R语言中知识点总结(一)
source("http://bioconductor.org/biocLite.R") biocLite("GEOquery") library(Biobas ...
- HeadFirst Ruby 第九章总结 mixins & modules
前言 如果想要复用 method, 可用的方法是针对 Class 的 inheritance,但是, inheritance has its limitations,它的缺点有: 只能 inhert ...
- pointer-events
在做移动端的页面时,经常会遇到点击(touch)一个弹出的层,在上面触发点击(touch)事件,当弹出层关闭之后点击(touch)事件会穿透到下面的层,这时候如果下一层的某个元素也绑定了点击(touc ...