WPF编程宝典读书笔记——第10章 资源(二)
2016-07-25 11:44
330 查看
一、资源的层次
每个元素都有自己的资源集合,为了找到期望的资源,WPF在元素树中进行递归搜索。
在WPF编程宝典读书笔记——第10章 资源(一)中将资源定义在了窗口级别,也可以将资源定义在包含三个按钮的StackPanel面板中,此时不用更改任何代码同样可以实现资源(一)中的功能。当然也可以将资源定义在按钮资源中,但这样会重复定义4次。
二、动态资源和静态资源
(1)静态资源必须先定义后使用否则XAML解析器就会抛异常。
异常实例演示:将Window.Resources资源放在StaticPanel后面定义则会抛出异常。
异常代码实例源码下载:ResourcesTest002
(2)静态资源和动态资源的区别
静态资源:只从资源集合中获取对象一次
动态资源:在每次需要对象时都会重新从资源集合中查找对象,这意味着在同一个键名下放置个全新的对象,此时动态资源会 自动应该该变化。
实例演示:第一个按钮使用静态资源,第二个按钮使用动态资源,点击第三个按钮会用纯色画刷替换掉当前资源的的图像画刷 对象。
上图:初始显示
上图:替换后显示
实例源码下载:ResourcesTest003
三、通过代码访问资源
通常在标记中定义和使用资源,如有必要,也可在代码中使用资源集合。
注意用到两个方法FindResource()和TryFindResource(),其中使用TryFindResource()方法,如果找不到资源,该方法会返回null,而不会抛出异常。
四、应用程序资源
窗口不是查找资源的最后一站。如果在控件或其容器(包含窗体)中找不到指定的资源,WPF会继续检查为应用程序定义的资源集合。在VS中,这些资源定义在App.xaml中。
应用程序资源为整个应用程序重用对象提供了一种极佳的方法。如果计划在多个窗口中使用资源对象,将其定义为程序资源是最好的选择。
实例代码演示:
五、系统资源
系统资源主要牵扯到三个类,分别是:SystemColors、SystemFonts和SystemParameters,这三个类都位于System.Windows名称空间中。他们通过各自的静态属性公开他们的所有细节。
SystemColors类用于访问颜色设置。
SystemFonts类用于访问字体设置。
SystemParameters类封装了大量的设置列表,这些设置描述了各种屏幕元素的标准尺寸、键盘和鼠标设置、屏幕尺寸以及各种图形效果(如热跟踪、阴影以及拖动窗口时显示窗口内容)是否已经打开。
通过代码应用系统资源,示例如下:
若要实现当系统设置变化是,控件能够无缝地自动更新自身,需添加动态资源,代码如下:
每个元素都有自己的资源集合,为了找到期望的资源,WPF在元素树中进行递归搜索。
在WPF编程宝典读书笔记——第10章 资源(一)中将资源定义在了窗口级别,也可以将资源定义在包含三个按钮的StackPanel面板中,此时不用更改任何代码同样可以实现资源(一)中的功能。当然也可以将资源定义在按钮资源中,但这样会重复定义4次。
二、动态资源和静态资源
(1)静态资源必须先定义后使用否则XAML解析器就会抛异常。
异常实例演示:将Window.Resources资源放在StaticPanel后面定义则会抛出异常。
异常代码实例源码下载:ResourcesTest002
(2)静态资源和动态资源的区别
静态资源:只从资源集合中获取对象一次
动态资源:在每次需要对象时都会重新从资源集合中查找对象,这意味着在同一个键名下放置个全新的对象,此时动态资源会 自动应该该变化。
实例演示:第一个按钮使用静态资源,第二个按钮使用动态资源,点击第三个按钮会用纯色画刷替换掉当前资源的的图像画刷 对象。
上图:初始显示
上图:替换后显示
实例源码下载:ResourcesTest003
三、通过代码访问资源
通常在标记中定义和使用资源,如有必要,也可在代码中使用资源集合。
注意用到两个方法FindResource()和TryFindResource(),其中使用TryFindResource()方法,如果找不到资源,该方法会返回null,而不会抛出异常。
四、应用程序资源
窗口不是查找资源的最后一站。如果在控件或其容器(包含窗体)中找不到指定的资源,WPF会继续检查为应用程序定义的资源集合。在VS中,这些资源定义在App.xaml中。
应用程序资源为整个应用程序重用对象提供了一种极佳的方法。如果计划在多个窗口中使用资源对象,将其定义为程序资源是最好的选择。
实例代码演示:
五、系统资源
系统资源主要牵扯到三个类,分别是:SystemColors、SystemFonts和SystemParameters,这三个类都位于System.Windows名称空间中。他们通过各自的静态属性公开他们的所有细节。
SystemColors类用于访问颜色设置。
SystemFonts类用于访问字体设置。
SystemParameters类封装了大量的设置列表,这些设置描述了各种屏幕元素的标准尺寸、键盘和鼠标设置、屏幕尺寸以及各种图形效果(如热跟踪、阴影以及拖动窗口时显示窗口内容)是否已经打开。
通过代码应用系统资源,示例如下:
btn3.Foreground = new SolidColorBrush(SystemColors.WindowTextColor);或为了提高效率,可使用现成的画刷属性:
btn3.Foreground = SystemColors.WindowTextBrush;在WPF中,可使用静态标记扩展访问静态属性,代码如下:
<Button Foreground="{x:Static SystemColors.WindowTextBrush}"/>上面的代码没有使用资源,这样在系统对应的属性发生变化时,该按钮控件不会更新自身。
若要实现当系统设置变化是,控件能够无缝地自动更新自身,需添加动态资源,代码如下:
<Button Foreground="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
相关文章推荐
- 自学成才的秘密:115个 web Develop 资源
- C#及WPF获取本机所有字体和颜色的方法
- WPF MVVM示例讲解
- WPF实现时钟特效
- PowerShell中调用WPF生成炫酷窗口实例
- WPF实现类似360安全卫士界面的程序源码分享
- C#中WPF使用多线程调用窗体组件的方法
- WPF自动隐藏的消息框的实例代码
- WPF弹出自定义窗口的方法
- WPF实现渐变淡入淡出的登陆窗口效果
- C#中使用资源的方法分析
- WPF的数据绑定详细介绍
- Shell脚本实现Linux系统和进程资源监控
- WPF绑定实例详解
- 关于WPF使用MultiConverter控制Button状态的详细介绍
- Android资源命名规范 分享
- C#使用Dispose模式实现手动对资源的释放
- 如何搭建新的WPF项目框架
- 超炫酷的WPF实现Loading控件效果
- 在WPF中动态加载XAML中的控件实例代码