【问题标题】:Relative URI path is not working correctly相对 URI 路径无法正常工作
【发布时间】:2012-08-31 08:09:01
【问题描述】:

我正在使用这些方法来动态加载图像和资源目录,但它们并非在每种情况下都有效

new Uri(@"pack://application:,,/Images/lession_tab.png");

此方法不适用于图像,但适用于资源文件。

new Uri("/project;component/Resources/Dictionary1.xaml", UriKind.Relative);

此方法不适用于资源目录,但适用于图像。

如果我得到正确的 pack://application 工作以获取本地组装路径,那么为什么这不适用于图像
它给出了异常无法找到资源'images/lession_tab.png'。

【问题讨论】:

    标签: wpf path


    【解决方案1】:

    IIRC,默认情况下,图像是“作为内容”而不是“作为资源”添加到项目中的,我不确定您是否可以使用这种 URI 语法引用“内容”。他们有什么 buildaction 他们有什么?资源还是内容?如果是内容,我认为你应该只使用像“/blah/image.png”这样的纯 URL。检查http://msdn.microsoft.com/en-us/library/aa970069.aspx 虽然他们在一些地方有一些奇怪的措辞..

    另一件事是包/应用程序有三个逗号:像pack://application:,,,/ContentFile.xaml 不是两个!每个 ',' 代表一个空的子定位符,因此请确保您尝试使用三个,因为位置含义会发生变化..

    【讨论】:

      【解决方案2】:

      尝试设置 Build Action = Resource and Copy to OutputDirectory = 第一种情况不要复制。

      您也可以使用以下 sn-p 加载“资源”项:

      public static class UriHelper
      {
          /// <summary>
          /// Gets absulute URI for provided relative path
          /// </summary>
          /// <param name="baseType">Base type for ussage as URI root</param>
          /// <param name="relativePath">Relative path</param>
          /// <returns>Absolute Uri</returns>
          public static Uri GetUri(Type baseType, string relativePath)
          {
              Assembly oAssembly = Assembly.GetAssembly(baseType);
              AssemblyName oName = oAssembly.GetName();
              return new Uri( 
                      String.Format(
                          "pack://application:,,,/{0};v{1};component/{2}",
                          oName.Name,
                          oName.Version.ToString(),
                          relativePath), 
                      UriKind.Absolute);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2017-06-29
        • 2015-07-20
        • 2016-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-30
        相关资源
        最近更新 更多