【WPF】什么是 Pack Uri,以及位图图像中的“:,,,”
详细请看:在 WPF 中打包 URI
解释为什么有Uri,pack和“:,,,”,Application2:component吗?
playIcon.Source = new BitmapImage(new Uri(@"pack://application:,,,/TempApplication2;component/Images/play.png"));
这是两个URI组成,WPF 支持两个颁发机构,
官网地址:https://docs.microsoft.com/zh-cn/dotnet/desktop/wpf/app-development/pack-uris-in-wpf?redirectedfrom=MSDN&view=netframeworkdesktop-4.8
URI的组成
资源文件的Pack URIs
Pack URI机制
意思:包://包的类型:,,,/路径
URI1:包://包的类型:,,,/路径
URI2: 包的类型:,,,/路径 包的类型分为两种application(WPF 应用程序)和siteoforigin(asp.net 网站)
wpf pack Uri 由两个URI组成,第二个uri是第一个uri的一部分份,uri非路径部分不能使用“/”,所以必须将第二uri的”///“用“,,,”替代 。
本地程序集中的资源文件
Authority: application:///
Path: 资源文件的名字,包括路径,相对于本地程序集的项目根目录。
例如: pack://application:,,,/ResourceFile.xml
pack://application:,,,/subfolder/ResourceFile.xaml
与常用的http,ftp,file等众所周知URI前缀,pack URI使用 pack
pack://authority/path
authority指定包含part的Package的类型。
path指定在Package中Part的位置。
Package与Parts的关系与application和files相似。一个application(package)可以包含多个files(parts):这些文件包括:
- 编译在本程序集中的资源文件;
- 编译在被引用程序集中的资源文件;
- 编译在引用程序集中的资源文件;
- 内容文件;
- 原始站点中的文件。
WPF支持两种authority , 分别是application:///和siteoforigin:///
application:/// 指定的应用程序数据文件,在编辑的时候是已知的,包括资源和内容文件。
siteoforigin:/// 指定原始文件的站点(The siteoforigin:/// authority identifies site of origin files.)
备注:The authority component of a pack URI is an embedded URI that points to a package and must conform to RFC 2396. Additionally, the "/" character must be replaced with the "," character, and reserved characters such as "%" and "?" must be escaped. See the OPC for details.
资源文件的Pack URIs
本地程序集中的资源文件
Authority: application:///
Path: 资源文件的名字,包括路径,相对于本地程序集的项目根目录。
例如: pack://application:,,,/ResourceFile.xml
pack://application:,,,/subfolder/ResourceFile.xaml
引用程序集中的资源文件
Authority: application:///.
Path: 被引用资源的文件名称. Path的格式如下:
AssemblyShortName{;Version]{;PublicKey];component/Path
-
AssemblyShortName: the short name for the referenced assembly.
-
;Version [optional]: the version of the referenced assembly that contains the resource file. This is used when two or more referenced assemblies with the same short name are loaded.
-
;PublicKey [optional]: the public key that was used to sign the referenced assembly. This is used when two or more referenced assemblies with the same short name are loaded.
-
;component: specifies that the assembly being referred to is referenced from the local assembly.
-
/Path: the name of the resource file, including its path, relative to the root of the referenced assembly's project folder.
例如:
绝对路径
pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml
pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml
pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml
pack://siteoforigin:,,,/SomeAssembly;com
相对路径
/ReferencedAssembly;component/ResourceFile.xaml
/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml
ResourceFile.xaml已经经过编译嵌入程序集.dll 中了
内容文件的Pack URIs
Authority: application:///.
Path: The name of the content file, including its path relative to the file system location of the application's main executable assembly.
例如:
pack://application:,,,/ContentFile.xaml
pack://application:,,,/Subfolder/ContentFile.xaml
备注:html内容文件不能被定位。需要使用 site of origin
Site of Origin Pack URIs
Authority: siteoforigin:///.
Path: The name of the site of origin file, including its path relative to the location from which the executable assembly was launched.
例如:
pack://siteoforigin:,,,/SiteOfOriginFile.xaml
pack://siteoforigin:,,,/Subfolder/SiteOfOriginFile.xaml
Page Files
被设置为MSBuild page的xaml文件被编译到程序集中,和资源文件的访问方式一样。
被编译为page的xaml文件一般用这些对象作为根元素:
绝对和相对Pack URIs
绝对Pack URIs包含完整的Scheme,authority和path
为了简化可以使用相对Pack URIs
例如:
绝对Pack URIs: pack://application:,,,/ResourceFile.xaml
相对Pack URIs: /ResourceFile.xaml
备注:site of origin只能使用绝对Pack URIs.
packURI 在WPF中的应用
在WPF中许多地方使用pack URIs包括:
(1)指定应用程序首次启动时要显示的用户界面 (UI),在app.xml中设置:
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" StartupUri="MainWindow.xaml" />
(2)正在加载图像。下面的示例演示如何使用 URI 指定窗口的图标、图片、音频。
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="SDKSample.MainWindow" Icon="WPFIcon1.ico"> </Window> <MediaElement Stretch="Fill" LoadedBehavior="Play" Source="pack://siteoforigin:,,,/Media/ringin.wav" /> <Image Source="pack://application:,,,/Theme/Image/blueLookUp.png" />
(3)导航到页面。
(4)加载不可执行数据文件。
此外,URI 还可用于从各种位置标识和加载文件,包括:
(1)当前程序集。
(2)引用的程序集。
(3)相对于程序集的位置。
(4)应用程序的源站点。应用程序皮肤
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" StartupUri="HomePage.xaml"> <Application.Resources> <ResourceDictionary Source="pack://siteoforigin:,,,/PageTheme.xaml" /> </Application.Resources> </Application>
代码中使用Pack URI