资源的简介

  1. 抽取公用的配置属性,一个地方定义可多个地方使用
  2. 方便用户编辑,减少XAML中的代码量
  3. 资源可以在各个层级中定义,使用Resources类来进行定义,必须定义唯一键
  4. 资源与程序集资源不相同,前者可编码实现,后者代表一些二重要的文件,图片,音视频文件等。

    资源的分类

    静态资源 StaticResource

  5. 静态资源只在资源集合中获取一次资源,以后无论该资源是否变化都不影响已经应用的静态资源类型

  6. 适合静态资源的场景
  7. 应用程序资源集中到页或应用程序级别的资源字典中,静态资源引用不会基于运行时行为(例如重新加载页)进行重新求值,因此,根据您的资源和应用程序设计避免大量不必要的动态资源引用
  8. 设置不在 DependencyObject) 或 Freezable) 上的属性的值
  9. 创建将编译为 DLL 并打包为应用程序的一部分或在应用程序之间共享的资源字典
  10. 使用资源来设置大量依赖项属性
  11. 为所有使用者更改基础资源,或者需要通过使用 x:Shared 特性)为每个使用者维护独立的可写实例
  12. 静态资源查找行为
  13. 在由设置属性的元素定义的资源字典中查找所请求的键。
  14. 查找过程向上遍历逻辑树,直到到达父元素及其资源字典为止
  15. 检查应用程序资源。 应用程序资源是 Application) 对象为您的 WPF 应用程序定义的资源字典中的资源。

    动态资源

  16. 动态资源每次查找时,都会到资源池里面进行查找,资源值会动态变化

  17. 适用动态资源的场景
  18. 资源的值取决于直到运行时才知道的情况
  19. 您正在为自定义控件创建或引用主题样式
  20. 在应用程序生存期调整 ResourceDictionary) 的内容
  21. 您有一个存在依存关系的复杂资源结构,在这种情况下,可能需要前向引用。
  22. 从编译或工作集角度来说,您引用的资源特别大,并且加载页时可能无法立即使用该资源。
  23. 您要创建的样式的 setter 值可能来自受主题或其他用户设置影响的其他值。
  24. 您正在将资源应用到元素,而在应用程序生存期中可能会在逻辑树中重新设置该元素的父级
  25. 动态资源的查找行为
  26. 查找过程在由设置属性的元素定义的资源字典中查找所请求的键。
  1. 查找过程向上遍历逻辑树,直到到达父元素及其资源字典为止
  2. 检查应用程序资源。 应用程序资源是 Application) 对象为您的 WPF 应用程序定义的资源字典中的资源
  3. 对于当前活动的主题,检查主题资源字典。
  4. 检查系统资源。

    资源字典

  5. 创建字典资源 ```csharp <ResourceDictionary xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation

    1. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    2. >

  1. 1. 使用资源字典
  2. ```csharp
  3. <Window.Resources>
  4. <ResourceDictionary Source="/CustomerResoucers/Test.xaml">
  5. </ResourceDictionary>
  6. </Window.Resources>
  7. <Grid>
  8. <TextBlock Background="{StaticResource test}"></TextBlock>
  9. </Grid>
  1. 使用其他程序集的资源字典
  2. MergedDictionaries 所返回的资源将来自在 MergedDictionaries) 集合中最后一个找到的字典。
  3. 通过source可以应用不同应用程序集中资源信息
    1. <ResourceDictionary>
    2. <ResourceDictionary.MergedDictionaries>
    3. <materialDesign:BundledTheme BaseTheme="Light" PrimaryColor="Blue" SecondaryColor="LightBlue" />
    4. <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />// 引用第三方的资源信息
    5. <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
    6. <ResourceDictionary Source="pack://application:,,,/JHT.XYYLClient;component/style/FontStyle.xaml" />
    7. </ResourceDictionary.MergedDictionaries>
    8. </ResourceDictionary>