应用程序.LoadComponent无法找到资源。

8

我的项目中有一个xaml文件,路径为Ns1\Ns2\myfile.xaml。它的构建操作设置为页面(Page),自定义工具为MSBuild:Compile。我试图在静态构造函数中加载这个文件:

namespace Ns1.Ns2 {
    internal class MyClass {
        static() {
            var obj = Application.LoadComponent(new Uri("/myfile.xaml", UriKind.Relative));
        }
    }
}

然而,当我尝试运行这段代码时,它会因为异常无法定位资源'myfile.xaml'而失败。如果我将URI更改为绝对URI:

var obj = Application.LoadComponent(new Uri("pack://application:,,,/ns1/ns2/myfile.xaml", UriKind.Absolute));

当我尝试使用绝对URI时,出现了错误Cannot use absolute URI。如果我将myfile.xaml的类型更改为Resource,则会得到相同的错误。

我该如何从代码中编译和引用myfile.xaml?

1个回答

13

您应该指定程序集名称:

Application.LoadComponent(new Uri("/AssemblyName;component/myfile.xaml", UriKind.Relative))

另外,如果该文件有一个代码后备类,您可以直接“new”它,生成的代码将加载相关的XAML。


1
在这种情况下,应该是/WpfApplication1;ns1/ns2/myfile.xaml吗?但是这样行不通。 - thecoop
1
@thecoop 我认为您忘记指定组件了。 - yo chauhan
1
运行得非常好,有什么想法为什么UriKind是相对的,而它看起来像是绝对路径,因为它指定了程序集和程序集内的路径? - Eyal Perry
2
@EyalPerry 这是一个相对 URI,因为它没有指定方案。在这种情况下的绝对 URI 是 pack://application:,,,/AssemblyName;component/myfile.xaml。请注意,LoadComponent 不接受绝对 URI。 - Eli Arbel
这对我很有帮助,我的错误是使用了 '/component' 而不是 'component'。 - RDV
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接