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

3.3.1 样式

在开发应用程序过程中,添加一个控件时可以通过设置控件的属性来控制它的显示外观。例如,对于TextBox文本框,可以通过设置字体属性得到不同的文本显示效果,这些属性包括FontFamily(字体类型)、FontSize(字体大小)、FontStyle(字形)和Foreground(字体颜色)等。尽管设计人员可以对应用程序的外观逐个进行大量的自定义操作,但他们还是需要一个功能强大的样式设置,以便在应用程序内部和应用程序之间共享和维护外观。

1.样式的定义及引用

在XAML中,任何派生自FrameworkElementFrameworkContentElement的元素下都可以定义样式。通常情况是将样式作为资源定义在元素的Resources属性元素下,语法格式如下所示:

<object.Resources>

<Style TargetType="ControlTypeName" x:Key="StyleKey">

<Setter Property="AttributeName" Value="AttributeValue">

</Setter>

...

</Style>

</object.Resources>

在上述语法格式中:

  • TargetType属性,用于指定要设置样式的控件类型,属性值是派生自FrameworkElement或FrameworkContentElement的类型,如果试图将样式应用到与TargetType属性值不匹配的控件,就会发生异常。

例如,在Page.Resources属性元素下定义一个页面级别的按钮样式资源,样式资源的键为ButtonStyle,并在Setter元素中设置按钮的FontFamily属性、FontStyle属性和FontSize属性的值分别为楷体、Italic和10像素,对应的XAML代码片段如下所示:

<Page.Resources>

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

<Setter Property="FontFamily" Value="楷体"/>

<Setter Property="FontStyle" Value="Italic"/>

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

</Style>

</Page.Resources>

在前面章节中提到,资源的定义位置不同,其有效使用范围也会不同,当把样式定义为资源时,它同样遵循这样的规则。在XAML应用程序中,样式作为资源时的作用范围包括如下情况:

  • 如果在Application.Resource属性元素中定义样式,则该样式可在应用程序中的任何位置使用。
  • 如果在Page.Resource属性元素中定义样式,则该样式只可在当前页面中使用。
  • 如果在控件的Resource属性元素中定义,则只对该控件的子孙控件有效,如Canvas控件。
  • 如果在Application.Resource属性元素和Page.Resource属性元素中同时定义了相同的样式,则在页面中定义的样式将覆盖Application.Resource属性元素中定义的样式。
  • 在Application.Resource属性元素中定义的样式将覆盖在单独的资源字典文件中定义的相同样式。

除了引用已经定义好的样式资源外,还可以在添加控件时通过定义Style属性元素直接为其定义样式,这时的样式仅作用于该控件本身。例如在向一个页面中添加一个按钮时,在Button.Style属性元素中定义Style元素,并在Style元素中设置按钮的文本颜色为红色,相应的XAML代码片段如下所示:

<Button Content="按钮" Width="100" Height="40">

<Button.Style>

<Style TargetType="Button">

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

</Style>

</Button.Style>

</Button>

样式被定义成资源后,像其他资源一样,可以根据样式资源的键使用StaticResource标记扩展来引用相应的样式,然后赋值给元素的Style属性,语法格式如下所示:

<object Style="{StaticResource StyleKey}" ...> ... </object>

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

  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 ...

随机推荐

  1. django核心配置项

    Django的默认配置文件中,包含上百条配置项目,其中很多是我们‘一辈子’都不碰到或者不需要单独配置的,这些项目在需要的时候再去查手册. 强调:配置的默认值不是在settings.py文件中!不要以为 ...

  2. django 配置 Django

    Django项目的设置文件位于项目同名目录下,名叫settings.py.这个模块,集合了整个项目方方面面的设置属性,是项目启动和提供服务的根本保证. 一.简述 settings.py文件本质上是一个 ...

  3. AndroidImageSlider第一张图闪过的问题解决

    1. AndroidImageSlider的使用: 参考源码:https://github.com/daimajia/AndroidImageSlider 当然网上介绍使用方法的很多,搜一搜. 2. ...

  4. Python Selenium Cookie 绕过验证码实现登录

    Python Selenium Cookie 绕过验证码实现登录 之前介绍过博客园的通过cookie 绕过验证码实现登录的方法.这里并不多余,会增加分析和另外一种方法实现登录. 1.思路介绍 1.1. ...

  5. idataway盐城

    地点的经纬度.

  6. ThinkPHP的数据操作

    查询: 具体数据的操作方法使用: 1. where()条件     $model->where(条件值);  //条件值就是sql语句where后边的结果值 2. limit() 限制条数  $ ...

  7. Alibaba Java诊断工具Arthas之快速安装和简单使用

    Alibaba Java诊断工具Arthas简单介绍 : 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 1.这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception ...

  8. python3-知识扩展扫盲易忘-generator的用法

    前部分转自: https://www.cnblogs.com/Tsukasa/p/6613934.html 通过列表list生成器,我们可以直接创建一个列表 ? 1 2 3 >>> ...

  9. LeetCode--404--左叶子之和

    问题描述: 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 方法:recursive class ...

  10. Wannafly挑战赛26 B 冥土追魂

    首先,证明结果一定是取某些整行,再加上一个多余的一行的前几个. 假如: x1<=x2<=x3<=x4<=x5 y1<=y2<=y3<=y4<=y5 取6 ...