2

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

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

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

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

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

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

4

2 回答 2

2

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

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

于 2012-08-31T08:39:10.457 回答
1

尝试设置 Build Action = Resource 和 Copy to OutputDirectory = Do not copy 第一种情况。

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

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);
    }
}
于 2012-08-31T08:37:57.377 回答