WPF中的Pack URI
2021-03-22 18:27
标签:table cto 指定 passing generic 渲染 tco 技术分享 dir 说来也简单:首先,我在WPF项目中建立了一个用户自定义控件(CustomControl),VS模板为我们自动生成了 CustomControl1和Theme文件夹(里边包含一个Generic.xaml): 接着,我想把它移动到一个新的类库(DLL)里去: 然后我添加了对类库的引用在WPF项目中,我开始尝试使用该自定义控件,结果,发现显示的结果始终不对,但是也 没有报错。究其原因,肯定是xaml没有加载到,致使界面没有渲染模板。最后开始搜索MSDN,发现WPF应用程序外 部包引用一般使用pack://规范。 表 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" 在代码中,可以通过实例化 Uri 类并将 pack URI 作为参数传递给构造函数来指定 pack URI。 下面的示例说明了这一点。 默认情况下,Uri 类将 pack URI 视为绝对 pack URI。 因此,在使用相对 pack URI 创建 Uri 类的实例时会引发异常。 幸运的是,Uri 类构造函数的 Uri(String, UriKind) 重载可以接受一个类型为 UriKind 的参数,使您可以指定 pack URI 是绝对 URI 还是相对 URI。 当您能够确定所提供的 pack URI 是相对 pack URI 还是绝对 pack URI 的时候,应该只指定 Absolute 或 Relative。 如果您不了解 所使用的 pack URI 的类型(例如,当用户在运行时输入 pack URI 时),请改用RelativeOrAbsolute。 SO,外部资源文件,比如视频、图片等,路径的引用都需要使用pack uri。 WPF中的Pack URI 标签:table cto 指定 passing generic 渲染 tco 技术分享 dir 原文地址:https://www.cnblogs.com/lonelyxmas/p/9479073.html问题
PACK URI
在代码中使用 Pack URI
Uri uri = new Uri("pack://application:,,,/File.xaml");
Uri uri = new Uri("/File.xaml");
// Absolute URI (default)
Uri absoluteUri = new Uri("pack://application:,,,/File.xaml", UriKind.Absolute);
// Relative URI
Uri relativeUri = new Uri("/File.xaml", UriKind.Relative);
// Relative or Absolute URI provided by user via a text box
TextBox userProvidedUriTextBox = new TextBox();
Uri uri = new Uri(userProvidedUriTextBox.Text, UriKind.RelativeOrAbsolute);
另外,还有,为什么在普通类库中右键添加新建项,没有wpf 自定义控件选项,只能手动建,或者从WPF项目建立后移植过来。