请教WPF高手关于在XAML里面使用pack uri使用引用的dll里面的资源图片的问题。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教WPF高手关于在XAML里面使用pack uri使用引用的dll里面的资源图片的问题。相关的知识,希望对你有一定的参考价值。
微软的教程我也看了http://msdn.microsoft.com/zh-cn/library/aa970069.aspx。
想实验一下,本地图片或当前程序集里面的图片都是可以的,但是引用其他dll里面的图片就没有成功过。
请高手给个示范?或者讲解如何制作这个dll才能被以如下格式引用。
pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/xxx.jpg
它和embedded的有区别么?
追答使用Resource,而不是Embedded Resource
Embedded resource: embeds the file in an exclusive assembly manifest resource.
Resource (wpf only): embeds the file in a shared (by all files in the assembly with similar setting) assembly manifest resource named AppName.g.resources.
WPF中的Pack URI
原文: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项目建立后移植过来。
以上是关于请教WPF高手关于在XAML里面使用pack uri使用引用的dll里面的资源图片的问题。的主要内容,如果未能解决你的问题,请参考以下文章
VS菜鸟请教WPF编程中按钮事件的问题:Click和Click_1
C# wpf 将xaml打印成pdf并能实现分页,ps:xaml里面是一个FixedPage的控件,请问该怎么做