10_深入浅出话资源

备注:类关系结构图如下:在这里插入图片描述

事件(Event)

引入

WPF 程序中数据就分为四个等级存储:数据库里的数据相当于存放在仓库里,资源文件里的数据相当于放在旅行箱里,WPF 对象资源里的数据相当于放在随身携带的背包里,变量中的数据相当于拿在手里。

WPF 对象级资源的定义和查找

  • 备注:每个 WPF 的界面元素都具有一个名为 Resource 的属性,这个属性继承自 FrameworkElement 类,其类型是 ResourceDictionary,形式是键值对的形式。

  • 一个例子
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    备注:

    • 注意引入的命名空间```xmlns:sys=“clr-namespace:System;assembly=mscorlib”
    • 注意第二张图片中,ResourceDictionary 和 ResourceKey 省略了,效果一样的。
    • 查找顺序:先查控件自己的 Resource 属性,如果没有这个资源程序会沿着逻辑树向上一级控件查找,如果一直没有则会报异常。
    • 如果资源文件放在独立文件中,也可以添加引用,代码如下:
      <Window.Resource>
          <ResourceDictionary Source="ShinyRed.xaml" />
      </Window.Resource>
      

静动态资源

  • 引入:如果你确定某些资源在程序初始化的时候使用一次,之后不会再改变,那就用静态资源(StaticResource),因为他是程序载入内存时对资源的一次性使用,之后就不再去访问这个资源。如果程序运行过程中有可能会改变资源,那就用动态资源(DynamicResource),因为他是在程序运行过程中仍然会去访问资源。

  • 一个例子
    在这里插入图片描述
    备注:

    • Window.Resource 中的 ResourceDictionary 的键值对中值可以是任何类型,在此处是 TextBlock 控件,同时他本质上字典,自然可以取值赋值,赋值语法和字典一样。
    • 动态资源在 Button 点击之后,内容会改变,但是静态资源不会。

二进制资源

  • 引入(和前面资源区别):资源字典里的资源称为WPF 资源或者 对象资源,应用程序内嵌资源称为程序集资源或者二进制资源。特别提醒一点,WPF 程序中写在<Application.Resource> ... </Application.Resource>标签内的资源仍然是 WPF 资源而非二进制资源。

  • 添加字符串等二进制资源:

    • 操作:Properties 名称空间中的 Resources.resx 资源文件双击(Resource 类) -> 访问级别由 Internal 改为 Public -> 然后手动添加键值对。
    • XAML 和 C# 中调用如下:在这里插入图片描述
      备注:
      • 别忘了导入命名空间xmlns:prop="clr-namespace.WpfApplication1.Properties",其中二进制资源对应的命名空间是 Properties 类是 Resources,接下就是取里面对应的字段了。
      • C# 访问 Resource.resx 中的资源与使用一般别无二致。
      • 使用 Resource.resx 的最大好处就是便于程序国际化、本地化,如果想改为英文,直接改资源文件就好了。
  • 添加图标、图片、音频或者视频二进制资源

    • 操作:在恰当的文件夹上右击 -> Add -> Existing Item -> 选择文件 -> 属性设置(Build Action 设为 Resource, 同时 Copy to Directory 设为 Do not copy),当然如果不希望以资源的形式使用外部文件,可以设置(Build Action 为 None,同时Copy to Directory 设为 Copy always)。
    • XAML 和 C# 代码如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VPohgJ90-1611026507423)(./images/10_06.png )]
    在这里插入图片描述
    在这里插入图片描述
    备注:

    • Pack URI 使用从右向左的正斜线表示路径
    • 例子里面都是相对路径,所以 C# 代码中 UriKind 必须为 Relative,同时是可以借助 . 和 … 的。

猜你喜欢

转载自blog.csdn.net/weixin_42310008/article/details/112802606