相对URI路径无法正常工作

时间:2012-08-31 08:09:01

标签: wpf path

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

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

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

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

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

如果我正确 pack://应用程序工作以获取本地assesmbly路径,那么为什么这对图像不起作用 它提供异常找不到资源'images / lession_tab.png'。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

尝试设置Build Action = Resource并复制到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);
    }
}