Wpf 相对URI路径工作不正常

Wpf 相对URI路径工作不正常,wpf,path,Wpf,Path,我正在使用这些方法动态加载图像和资源目录,但它们并不适用于所有情况 new Uri(@"pack://application:,,/Images/lession_tab.png"); 此方法不适用于图像,但适用于资源文件 new Uri("/project;component/Resources/Dictionary1.xaml", UriKind.Relative); 此方法不适用于资源目录,但适用于映像 如果我得到正确的答案pack://application努力获取本地AssesBly

我正在使用这些方法动态加载图像和资源目录,但它们并不适用于所有情况

new Uri(@"pack://application:,,/Images/lession_tab.png");
此方法不适用于图像,但适用于资源文件

new Uri("/project;component/Resources/Dictionary1.xaml", UriKind.Relative);
此方法不适用于资源目录,但适用于映像

如果我得到正确的答案pack://application努力获取本地AssesBly路径,那么为什么这不适用于图像

它会出现异常无法找到资源“images/lession\u tab.png”。

尝试设置Build Action=resource并复制到OutputDirectory=don not Copy作为第一种情况

您还可以使用以下代码段加载“资源”项:

公共静态类
{
/// 
///获取提供的相对路径的absulute URI
/// 
///ussage作为URI根的基类型
///相对路径
///绝对Uri
公共静态Uri GetUri(类型baseType,字符串relativePath)
{
Assembly oAssembly=Assembly.GetAssembly(baseType);
AssemblyName oName=oAssembly.GetName();
返回新Uri(
字符串格式(
"pack://application:,,,/{0};v{1};组件/{2}“,
奥纳姆,名字,
oName.Version.ToString(),
相对路径),
乌里金(绝对);
}
}

IIRC,默认情况下,图像是作为“内容”而不是作为“资源”添加到项目中的,我不确定您是否可以使用此URI语法引用“内容”。他们有什么?他们有什么?资源还是内容?如果是内容,我想你应该使用简单的URL,比如“/blah/image.png”。尽管他们在一些地方有一些奇怪的字眼,但还是要检查一下

另一件事是pack/application有三个逗号:比如
pack://application:,,,/ContentFile.xaml
不是两个!每个“,”代表一个空的子定位器,因此请确保在位置含义发生变化时尝试使用三个

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