WPF编程宝典读书笔记——第10章 资源(二)

一、资源的层次

        每个元素都有自己的资源集合,为了找到期望的资源,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}}"/>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值