2012-08-31 131 views
2

我使用这些方法来动态加载图像和资源目录,但他们没有在任何情况下相对URI路径工作不正常

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

这种方法DONOT图像工作的工作,但它的资源文件工作。

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

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

如果我正确地得到这个包://应用工作,得到当地assesmbly路径,那么为什么这不是图像
这是给异常无法找到资源“图像/ lession_tab.png”工作。

回答

2

IIRC,图像是默认添加到项目“为内容的”而不是“为资源”,我不确定你是否可以用这个URI语法来引用“内容”。他们有什么建设行动?资源或内容?如果内容,我认为你应该使用普通的URL,如“/blah/image.png”。检查http://msdn.microsoft.com/en-us/library/aa970069.aspx虽然他们中有几个地方有些陌生的字眼..

另一件事是,包/应用有三个逗号:像pack://application:,,,/ContentFile.xaml不是两个!每个','代表一个空的子定位器,所以请确保你尝试了三个,因为位置的含义发生了变化。

1

尝试设置生成操作=资源并复制到OutputDirectory =不要为第一种情况复制。

您也可以使用下面的代码片段加载“资源”项目:

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); 
    } 
} 
+0

thnx代码,我会研究它 – Buzz