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

WPF Pack

在WPF中,Pack URI(Uniform Resource Identifier)是一种特殊格式的统一资源标识符用于定位和访问应用程序内部或外部的各种资源,如XAML文件、图像、样式、字体等。这种机制允许开发者以标准化、平台无关的方式引用和打包应用程序所需的非可执行数据文件。

以下是对WPF中Pack URI的关键概念和使用要点的概述:

  1. 基本结构: Pack URI遵循通用的URI格式,但添加了特定的“authority”部分以标识资源所在的上下文。典型的Pack URI结构如下:

    pack://authority/path

    其中:

    • authority:指定资源所在的位置类型,对于WPF应用程序,通常为application://,表示资源属于当前应用程序。
    • path:指明资源的实际路径或名称,可以是相对于应用程序根目录的相对路径,也可以是绝对路径。
  2. 资源类型: WPF将应用程序数据文件分为以下三类,每种类型有不同的打包和访问方式:

    • 资源文件(Resource Files):这些文件在编译时被嵌入到应用程序的可执行文件或相关的类库中。它们通过Build Action属性设置为Resource资源文件的Pack URI直接基于文件在项目结构中的相对路径,并不依赖于文件的实际物理位置。
    • 内容文件(Content Files):内容文件与程序集有显式关联,但保持为单独的文件,通常通过Build Action设置为Content。它们可以被打包到应用程序的部署包中,或在运行时从特定位置加载。内容文件的Pack URI同样基于项目结构中的相对路径。
    • 源站点文件(Site of Origin Files):这类文件与程序集没有直接关联,通常在运行时动态获取,如从Web服务器下载。它们不使用Pack URI进行引用。
  3. 使用示例:

    • 引用编译到本地程序集内的资源文件
      Uri resourceUri = new Uri("pack://application:,,,/MyResource.xaml");
    • 引用位于子文件夹中的资源
      Uri imageUri = new Uri("pack://application:,,,/Images/Logo.png");
    • 引用内容文件(假设内容文件被打包并部署在同一目录下):
      Uri contentUri = new Uri("pack://application:,,,/Content/File.txt");
  4. 加载资源: 使用Pack URI定位资源后,可通过WPF的资源管理器或特定控件的方法来加载资源。例如:

    • 使用Application.GetResourceStream()获取资源流:
      StreamResourceInfo resourceInfo = Application.GetResourceStream(resourceUri);
    • 直接在XAML中引用资源(如图像、样式等):
      <Image Source="pack://application:,,,/Images/Logo.png" />
  5. 相对与绝对路径:

    • 相对Pack URI:仅提供资源的相对路径,相对于引用它的代码或XAML文件的位置。在代码中创建Uri对象时,如果使用相对路径,可能需要指定一个基Uri来确保正确解析。
    • 绝对Pack URI:提供完整的资源路径,从应用程序根开始。如上所示的pack://application:,,,/...形式即为绝对路径,可以直接使用。

综上所述,WPF中的Pack URI提供了一种标准且灵活的方式来标识和访问应用程序的各类资源,无论是编译内嵌的、打包的内容文件,还是外部的源站点文件,都能通过这一机制进行统一管理和加载。开发者应根据资源的类型和使用需求选择合适的打包策略和对应的Pack URI格式。

pack://application:,,,/ 是一种特殊的URI(统一资源标识符)格式,用于定位应用程序内部的资源。这里的,,,是一个特定的占位符,它在Pack URI语法中扮演着重要的角色,代表了以下几个方面的信息:

  1. 协议

    • pack: 表示这是一个Pack URI,它遵循一种特定的打包和资源定位协议,专为WPF及类似框架设计,用于在应用程序内部查找资源。
  2. 权限部分(Authority):

    • application:/// 表示资源位于当前应用程序的范围内。这里的application指明了资源所在的“权威机构”,即资源是属于当前正在运行的应用程序。三个连续的斜杠(///)表示资源的根目录,即应用程序的根目录。
  3. 路径分隔符

    • ,,, 作为路径分隔符,它在Pack URI语法中起到了分隔权限部分与实际资源路径的作用。在这个特定的上下文中,,,,并不表示任何实际的目录层级或文件名,而是一个约定俗成的标记,用于标识权限部分结束,接下来的部分将是相对于应用程序根目录的资源路径。
  4. 资源路径

    • ,,,之后的是资源的实际路径,可以是相对于应用程序根目录的相对路径,也可以是绝对路径。例如,/Themes/MyTheme.xaml 或 Images/Logo.png。这个路径指向具体的资源文件,如XAML文件、图像、样式表等。

因此,当你看到 pack://application:,,,/MyResource.xaml 这样的URI时,它完整地表示了:

  • 使用Pack协议定位资源;
  • 资源属于当前运行的应用程序;
  • 资源路径为MyResource.xaml,位于应用程序的根目录下。

这样的URI格式使得WPF能够以一致且平台无关的方式寻址和加载应用程序内部的各种资源,无论这些资源是在编译时嵌入到程序集内,还是作为内容文件打包随应用程序一起部署。开发者可以利用这种URI来指定控件的样式、图像源、数据模板等,使得资源的引用与实际的物理文件位置解耦,有利于项目的组织和维护。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C# 字符串和枚举类型互相转换
  • 007 spring aop(通知)(xml)
  • fastlio2 保存每帧的点云和每帧的里程计为单独的文件做后端回环优化和手动回环优化
  • 整数和(推公式)
  • MongoDB复制集安装配置图文教程-Windows篇 fasstgpt必看
  • Rust---复合数据类型之字符串与切片(2)
  • LangChain - PromptTemplate
  • k8s删除namespace失败一直处于Terminating状态
  • 【第十一届大唐杯全国大学生新一代信息通信技术大赛】赛题分析
  • 支持向量机(SVM)白话之个人理解(学习记录)
  • 初学ELK - elk部署
  • 素数判定(HDU2012)
  • 利用ES6 Set去重
  • rust实现一个post小程序
  • MySQL 多表查询
  • CentOS6 编译安装 redis-3.2.3
  • docker python 配置
  • docker容器内的网络抓包
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • es的写入过程
  • Git学习与使用心得(1)—— 初始化
  • js如何打印object对象
  • mysql 数据库四种事务隔离级别
  • React 快速上手 - 07 前端路由 react-router
  • socket.io+express实现聊天室的思考(三)
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 闭包--闭包之tab栏切换(四)
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 第十八天-企业应用架构模式-基本模式
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 给github项目添加CI badge
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • Java总结 - String - 这篇请使劲喷我
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​批处理文件中的errorlevel用法
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (160)时序收敛--->(10)时序收敛十
  • (2.2w字)前端单元测试之Jest详解篇
  • (function(){})()的分步解析
  • (pojstep1.1.2)2654(直叙式模拟)
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (不用互三)AI绘画工具应该如何选择
  • (附源码)php投票系统 毕业设计 121500
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)winform之ListView
  • .axf 转化 .bin文件 的方法
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!