WPF中的Pack URI

说来也简单:首先,我在WPF项目中建立了一个用户自定义控件(CustomControl),VS模板为我们自动生成了

CustomControl1和Theme文件夹(里边包含一个Generic.xaml):

接着,我想把它移动到一个新的类库(DLL)里去:

然后我添加了对类库的引用在WPF项目中,我开始尝试使用该自定义控件,结果,发现显示的结果始终不对,但是也

没有报错。究其原因,肯定是xaml没有加载到,致使界面没有渲染模板。最后开始搜索MSDN,发现WPF应用程序外

部包引用一般使用pack://规范。

PACK URI

表 1:标记中的绝对 Pack URI


文件


绝对 pack URI


资源文件 — 本地程序集


"pack://application:,,,/ResourceFile.xaml"


子文件夹中的资源文件 — 本地程序集


"pack://application:,,,/Subfolder/ResourceFile.xaml"


资源文件 — 所引用的程序集


"pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml"


所引用的程序集的子文件夹中的资源文件


"pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"


所引用的版本化程序集中的资源文件


"pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml"


内容文件


"pack://application:,,,/ContentFile.xaml"


子文件夹中的内容文件


"pack://application:,,,/Subfolder/ContentFile.xaml"


源站点文件


"pack://siteoforigin:,,,/SOOFile.xaml"


子文件夹中的源站点文件


"pack://siteoforigin:,,,/Subfolder/SOOFile.xaml"

表 2:标记中的相对 Pack URI


文件


相对 pack URI


本地程序集中的资源文件


"/ResourceFile.xaml"


本地程序集的子文件夹中的资源文件


"/Subfolder/ResourceFile.xaml"


所引用的程序集中的资源文件


"/ReferencedAssembly;component/ResourceFile.xaml"


所引用的程序集的子文件夹中的资源文件


"/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"


内容文件


"/ContentFile.xaml"


子文件夹中的内容文件


"/Subfolder/ContentFile.xaml"

在代码中使用 Pack URI

在代码中,可以通过实例化 Uri 类并将 pack URI 作为参数传递给构造函数来指定 pack URI。 下面的示例说明了这一点。

Uri uri = new Uri("pack://application:,,,/File.xaml");

默认情况下,Uri 类将 pack URI 视为绝对 pack URI。 因此,在使用相对 pack URI 创建 Uri 类的实例时会引发异常。

Uri uri = new Uri("/File.xaml");

幸运的是,Uri 类构造函数的 Uri(String, UriKind) 重载可以接受一个类型为 UriKind 的参数,使您可以指定 pack URI 是绝对

URI 还是相对 URI。

// Absolute URI (default)
Uri absoluteUri = new Uri("pack://application:,,,/File.xaml", UriKind.Absolute);
// Relative URI
Uri relativeUri = new Uri("/File.xaml", UriKind.Relative);

当您能够确定所提供的 pack URI 是相对 pack URI 还是绝对 pack URI 的时候,应该只指定 Absolute 或 Relative。 如果您不了解

所使用的 pack URI 的类型(例如,当用户在运行时输入 pack URI 时),请改用RelativeOrAbsolute

// Relative or Absolute URI provided by user via a text box
TextBox userProvidedUriTextBox = new TextBox();
Uri uri = new Uri(userProvidedUriTextBox.Text, UriKind.RelativeOrAbsolute);

SO,外部资源文件,比如视频、图片等,路径的引用都需要使用pack uri。另外,还有,为什么在普通类库中右键添加新建项,没有wpf 自定义控件选项,只能手动建,或者从WPF项目建立后移植过来。
时间: 2024-08-25 06:24:55

WPF中的Pack URI的相关文章

WPF 中的 Pack URI地(资源文件加载)

参考资源网http://msdn.microsoft.com/zh-cn/library/aa970069.aspx#Absolute_vs_Relative_Pack_URIs 在 Windows Presentation Foundation (WPF) 中,使用统一资源标识符 (URI) 标识和加载文件的方式有很多,包括: 指定当应用程序第一次启动时显示的用户界面 (UI). 加载图像. 导航到页 加载不可执行的数据文件. 此外,可以使用 URI 标识和加载位于各种位置的文件,这些位置包括

WPF 中的 Pack URI-访问程序集资源

在 Windows Presentation Foundation (WPF) 中,使用统一资源标识符 (URI) 标识和加载文件的方式有很多,包括: 指定当应用程序第一次启动时显示的用户界面 (UI). 加载图像. 导航到页 加载不可执行的数据文件. 在代码中使用 Pack URI 在代码中,可以通过实例化 Uri 类并将 pack URI 作为参数传递给构造函数来指定 pack URI.下面的示例说明了这一点. C# Uri uri = new Uri("pack://application

资源文件加载(Pack URI 方案)

Pack URI 在 Windows Presentation Foundation (WPF) 中,使用统一资源标识符 (URI) 标识和加载文件的方式有很多,包括:1.指定当应用程序第一次启动时显示的用户界面 (UI)2.加载图像3.导航到页4.加载不可执行的数据文件此外,可以使用 URI 标识和加载位于各种位置的文件,这些位置包括:1.当前程序集2.所引用的程序集3.相对于程序集的某个位置4.应用程序的源站点为了提供从这些位置标识和加载上述类型的文件的一致机制,WPF 利用了 pack U

转:pack URI in WPF

一开始看到WPF里面经常用如下语句来构造资源文件Uri: Uri uri = new Uri("/AssemblyName;component/image.png"); 我还以为这种格式的字符串是URI标准规定的,但是网上查了一下却没发现有这种格式的URI字符串. URI是统一资源标识符,通用文法为: 协议名(http,https,ftp,file等)+冒号+协议所对应的内容 URI又分为URL和URN,URL是用来定义一个资源的访问路径.而URN则是用来定义一个资源的名称.(http

WPF 中的 Uri 地址的不同写法

想写时发现别人已经写了,直接引用. http://www.cnblogs.com/xietianjiao/p/5640269.html 绝对 pack WPF URI pack://application:,,,/是协议:“,,,”是“///”的变体 1.资源文件 — 本地程序集 Uri uri = new Uri("pack://application:,,,/ResourceFile.xaml", UriKind.Absolute); 子文件夹中的资源文件 — 本地程序集(资源文件

【转】【WPF】资源读取 URI

一开始看到WPF里面经常用如下语句来构造资源文件Uri: Uri uri = new Uri("/AssemblyName;component/image.png"); 我还以为这种格式的字符串是URI标准规定的,但是网上查了一下却没发现有这种格式的URI字符串. URI是统一资源标识符,通用文法为: 协议名(http,https,ftp,file等)+冒号+协议所对应的内容 URI又分为URL和URN,URL是用来定义一个资源的访问路径.而URN则是用来定义一个资源的名称.(http

WPF 中资源路径的问题

WPF 中资源路径的问题 1. 引用当前工程的资源(注意xxxx.png的build action 应设置为Resource 或Embedded Resource) ? 1 <ImageBrush ImageSource="/currentAssemblyName;component/subfoldername/xxxx.png"/> 2.引用其它工程的资源  (注意xxxx.png的build action 应设置为Resource 或Embedded Resource)

wpf中内置资源文件

wpf中包含三种文件类型 资源文件:编译到可执行或库 WPF 程序集中的数据文件. 内容文件:与可执行 WPF 程序集具有显式关联的独立数据文件. 源站点文件:与可执行 WPF 程序集没有关联的独立数据文件. 这三种类型的文件之间的一个重要区别是:资源文件和内容文件在生成时是已知的:程序集明确地知道它们的存在.但是对于源站点文件,程序集可能完全不知道它们,或者通过 pack 统一资源标识符 (URI) 引用知道它们的存在:在后一种情况下,不能保证被引用的源站点文件实际存在. 说说资源文件的使用

在WPF中使用fortawesome之类的字体图标

我之前在博客中介绍过几个矢量图库网站,在WPF程序中,一般接触到的矢量图标资源有XAML.SVG.字体这三种格式.XAML是标准格式就不说了,SVG并不是直接支持的,不过微软提供了Expression Design可以非常方便我们将其转换为XAML格式的资源.而对于字体,虽然WPF是直接支持的,但由于字体图标其特殊性,要将其显示为图标还是需要费点劲的.本文这里就以Font-Awesome为例,介绍一下如何在WPF中使用字体图标. 首先添加一个样式,为了使用方便,建议直接做为全局样式: <Styl