当前位置: 首页 > news >正文

WPF资源系统

文件资源

程序集资源

例如一些图片、音频、字体等,将这些文件导入到项目中,就可以在代码中使用这些资源

图片资源

  1. 将资源复制到项目中。
    image
  2. 右键设计文件属性的生成操作为资源
    image
    image
  3. 在xaml中使用图片资源
<Window x:Class="wpf_study.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:wpf_study"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><Grid.RowDefinitions ><RowDefinition  Height="auto"/><RowDefinition  Height="1*"/><RowDefinition  Height="1*"/><RowDefinition  Height="3*"/></Grid.RowDefinitions><Grid.ColumnDefinitions ><ColumnDefinition /><ColumnDefinition /><ColumnDefinition /><ColumnDefinition /></Grid.ColumnDefinitions><Image Source="/Asserts/107119287_p0_master1200 (1).jpg" /></Grid>
</Window>

启动发现图片可以在应用程序中显示了
image
还有一种方式直接使用pack url来引入资源
pack url的格式如下所示:
pack://application:,,,/[程序集名称;component/][文件夹/]文件名
如下代码所示图片也可以引用进来

<Grid><Grid.RowDefinitions ><RowDefinition  Height="auto"/><RowDefinition  Height="1*"/><RowDefinition  Height="1*"/><RowDefinition  Height="3*"/></Grid.RowDefinitions><Grid.ColumnDefinitions ><ColumnDefinition /><ColumnDefinition /><ColumnDefinition /><ColumnDefinition /></Grid.ColumnDefinitions><Image Source="pack://application:,,,/Asserts/107119287_p0_master1200 (1).jpg" /></Grid>

当把资源文件设置成resource类型时,资源文件会被编译进exe或dll内部,这时候没有路径,所以无法直接使用路径来访问,所以需要pack url。
image

对象资源

可以在窗口资源中抽出一些通用的变量来共其他元素服用,如下所示,定义了四张图片,如果按之前的配置来,需要给每张图片都要设置宽和高,如果后期宽和高变了,维护起来可能不太方便。

        <Image Grid.Column="1" Source="pack://application:,,,/Asserts/107119287_p0_master1200 (1).jpg" /><Image Grid.Column="0" Source="pack://application:,,,/Asserts/107119287_p0_master1200 (1).jpg" /><Image Grid.Column="2" Source="pack://application:,,,/Asserts/107119287_p0_master1200 (1).jpg" /><Image Grid.Column="3" Source="pack://application:,,,/Asserts/107119287_p0_master1200 (1).jpg" />

如果使用窗口资源的话就可以完美解决这个问题,只需要在窗口资源中定义了宽和高的值,然后在元素中进行引用,即便是后期值变了,也只需要在窗口资源中进行修改,不需要修改多个地方,后期维护起来也方便。
定义窗口资源需要Window.resouces标签,如果想要在xaml中使用数字类型的变量还需要引入xmlns:System="clr-namespace:System;assembly=mscorlib"命名空间。
如下所示定义了一个窗口资源,它的值为Double类型的200,定义完成后{StaticResource }关键字引入,staticResouce后面跟着我们定义的key即可,如下所示

<Window x:Class="wpf_study.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:wpf_study"xmlns:System="clr-namespace:System;assembly=mscorlib"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Window.Resources><!--定义一个double类型的窗口元素 key为wid 值为200--><System:Double x:Key="wid">200</System:Double></Window.Resources><Grid><Grid.RowDefinitions ><RowDefinition  Height="auto"/><RowDefinition  Height="1*"/><RowDefinition  Height="1*"/><RowDefinition  Height="3*"/></Grid.RowDefinitions><Grid.ColumnDefinitions ><ColumnDefinition /><ColumnDefinition /><ColumnDefinition /><ColumnDefinition /></Grid.ColumnDefinitions><!-- 使用窗口元素wid --><Image Grid.Column="1" Width="{StaticResource wid}" Height="{StaticResource wid}" Source="pack://application:,,,/Asserts/107119287_p0_master1200 (1).jpg" /><Image Grid.Column="0" Width="{StaticResource wid}" Height="{StaticResource wid}" Source="pack://application:,,,/Asserts/107119287_p0_master1200 (1).jpg" /><Image Grid.Column="2" Width="{StaticResource wid}" Height="{StaticResource wid}" Source="pack://application:,,,/Asserts/107119287_p0_master1200 (1).jpg" /><Image Grid.Column="3" Width="{StaticResource wid}" Height="{StaticResource wid}" Source="pack://application:,,,/Asserts/107119287_p0_master1200 (1).jpg" /></Grid>
</Window>

除了窗口资源外,其他元素也有资源,例如border.resource等,用起来也和窗口资源一样

        <Border><Border.Resources></Border.Resources></Border>

资源字典

类似css一样,可以将资源信息都封装到一个文件里,使用时直接引用文件即可,这样集中维护的话,后期维护起来也很方便。
可以右键新建资源字典
image
然后将配置设置到文件里

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:System="clr-namespace:System;assembly=mscorlib"><System:Double x:Key="hw">100</System:Double></ResourceDictionary>

在xaml中如果引用单个的话直接在使用source属性引用数据字典即可,和引用图片音频类似,直接使用pack url也可以的。

    <Window.Resources><ResourceDictionary Source="/res.xaml"></ResourceDictionary></Window.Resources>

如果要引用多个数据字典的话需要添加ResourceDictionary.MergedDictionaries,然后在标签中定义每个资源字典即可,如下所示:

       <ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="res.xaml"/><ResourceDictionary Source="res.xaml"/></ResourceDictionary.MergedDictionaries></ResourceDictionary>

静态资源与动态资源

  • 静态资源: 程序编译时已经确定了。
  • 动态资源: 在程序运行的过程中资源会发生改变,修改后的资源会自动刷新到组件中。

样式

类似web前端的css配置,可以直接通过style标签来设置指定组件的样式。

http://www.jsqmd.com/news/263645/

相关文章:

  • RK3588端实时人体姿态识别方案:YOLOv11-Pose高精度落地,推理速度直接拉满
  • union 和 union all的区别
  • Flutter 3.22+ 高性能开发实战:从状态管理到原生交互全解析 - 指南
  • 【大数据毕设选题推荐】基于Hadoop+Spark的起点小说网数据可视化分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
  • 8B小模型后训练实战:企业私域语义空间稳定性与通用能力平衡指南
  • 2026首发版,自学AI大模型的正确顺序:最新最全学习路线
  • 【计算机毕设推荐】:Hadoop+Django气象地质灾害大数据可视化系统 毕业设计 选题推荐 毕设选题 数据分析 机器学习
  • 大模型选择困难症?8款主流AI助手(GPT/Claude/GLM等)特点与适用场景详解,建议收藏
  • linux 设置 udp 缓冲区大小的方法有多少种
  • 程序员转型AI产品经理完整指南:大模型时代必备技能与学习路径
  • 关于SSD1315/SSD1306的0xDA指令
  • Redis-配置文件 - 详解
  • 让 YOLOv11 Pose 在 RKNN 上跑起来:端侧姿态估计部署与性能优化实战
  • AI学术支持:6个平台智能分析与专业内容优化
  • 导师严选2026自考AI论文平台TOP10:哪款真能帮你写好毕业论文?
  • Bug侦破大会:破解技术悬案的终极策略
  • 图神经网络分享系列-GraphSage(Inductive Representation Learning on Large Graphs) (四)
  • 无人机实时图像推理加速实战
  • MATLAB高效算法优化实战技巧
  • 深度测评自考必备AI论文平台TOP9:选对工具轻松过关
  • 一个OHEM技巧,轻松解决样本失配,语义分割 mIoU 显著提升
  • 告别资料混乱!PandaWiki+cpolar 让本地 AI 知识库随身用
  • 6大AI学术工具评测:自动改写如何优化论文语言
  • 工业AMR场景融合设计原理2——系统的上下文分析
  • AI论文工具TOP8:改写+写作功能深度测评
  • YOLOv11-Pose部署RK3588实战:人体姿态识别精度翻倍,边缘推理速度突破瓶颈
  • 8款AI论文工具大PK:改写与写作功能谁更强?
  • 透明锁屏软件keyfreeze(屏幕锁) - 教程
  • Python自然语言处理的技术未来与架构演进
  • 突破长序列预测瓶颈:新一代高效 Transformer 架构全面提速