(在我深入研究细节之前,我想设置上下文:我正在尝试使用.html文件的内容加载WPF框架,我将其作为资源包含在我的项目中。)
我创建了一个新的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();
}
任何帮助都将受到赞赏...提前感谢!
答案 0 :(得分:8)
尝试将组件 -part添加到您的包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
}