我正在使用这些方法动态加载图像和资源目录,但它们并不适用于所有情况
new Uri(@"pack://application:,,/Images/lession_tab.png");
此方法不适用于图像,但适用于资源文件。
new Uri("/project;component/Resources/Dictionary1.xaml", UriKind.Relative);
此方法不适用于资源目录,但适用于图像。
如果我正确 pack://应用程序工作以获取本地assesmbly路径,那么为什么这对图像不起作用 它提供异常找不到资源'images / lession_tab.png'。
答案 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);
}
}