zoukankan      html  css  js  c++  java
  • WPF中的Pack URI


    Aa970069.collapse_all(zh-cn,VS.110).gif问题

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

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

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

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

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

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

    Aa970069.collapse_all(zh-cn,VS.110).gifPACK 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"

    Aa970069.collapse_all(zh-cn,VS.110).gif在代码中使用 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项目建立后移植过来。

  • 相关阅读:
    创建git项目的feature分支以及下载特定分支的仓库代码
    C++读取文件
    linux解压eclipse启动时无法找到jre环境的解决办法
    ubuntu安装谷歌浏览器
    web项目脱离Eclipse在Tomcat部署并配置Eclipse调试
    阿里巴巴连接池Druid简单使用
    gc overhead limit exceeded
    onload方法注意点
    获取Spring管理的Bean
    Java应用中使用ShutdownHook友好地清理现场
  • 原文地址:https://www.cnblogs.com/denghejun/p/3794670.html
Copyright © 2011-2022 走看看