(在我进入细节之前,我想设置上下文:我正在尝试加载一个 WPF 框架,其中包含我作为资源包含在我的项目中的 .html 文件的内容。)
我创建了一个新的 WPF 应用程序;我向项目添加了一个名为“foofiles”的新文件夹,并向该文件夹添加了几个文件(page1.foo 和 page2.foo)。
对于每个新添加的 .foo 文件,我右键单击它,转到“属性”,然后将构建操作设置为“资源”,并将“复制到输出目录”设置为“始终复制”。
我希望能够在 XAML 中访问这些文件:
<Frame x:Name="bar" Source="/foofiles/page1.foo"/>
在程序代码中:
private void someFunc()
{
bar.Source = new Uri("/foofiles/page1.foo");
}
但我只是想不通为什么这不起作用——我收到“无法确定 URI 的格式”。
在代码隐藏中,我尝试这样做:
private void someFunc()
{
bar.Source = new Uri("pack://application:,,,/foofiles/page1.foo");
}
它没有抛出异常,但我的主窗口崩溃了。
在我看来,如果我将任何类型的文件添加到我的项目中,并且如果我在“构建操作”中将其标记为“资源”,我应该能够根据上面的示例使用该文件。另外,我想像这样使用该文件:
private void someOtherFunc()
{
System.IO.StreamReader reader = new System.IO.StreamReader("/foofiles/page1.foo");
string bar = reader.ReadToEnd();
}
如有任何帮助,我们将不胜感激...提前致谢!
最佳答案
尝试像这样将组件部分添加到您的 Pack URI
pack://application:,,,/AssemblyName;component/ResourceName
其中 AssemblyName 是程序集的名称。因此,对于您的情况,以下语句应该有效:
bar.Source = new Uri("pack://application:,,,/AssemblyName;component/foofiles/page1.foo");
更实际地,尝试相对包 uri 表示法:
bar.Source = new Uri("AssemblyName;component/foofiles/page1.foo", UriKind.Relative));
流式阅读资源使用
var streamResourceInfo = Application.GetResourceStream(uri);
using (var stream = streamResourceInfo.Stream)
{
// do fancy stuff with stream
}
关于c# - 访问 C# WPF 应用程序中的资源(同一程序集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18257250/