如何使用XamlReader从程序集中的Xaml文件加载
本文关键字:Xaml 文件 加载 集中 程序集 何使用 XamlReader 程序 | 更新日期: 2023-09-27 18:11:46
我在stackoverflow和互联网上找到了几个关于如何从静态文件加载Xaml的帖子:他们建议创建一个XmlReader或StreamReader,指向文件系统上找到的文件,但是我想要读取的. Xaml文档将与程序集的其余部分一起编译,因此它不会有一个有意义的文件Uri。我不想把这份文件复制到集会去的任何地方。是否有一种方法从已编译到程序集的.xaml文档中读取?
我也知道我可以简单地从代码本身的一个很长的字符串字面量中读取,但我宁愿不这样做——从Xaml生成的UIElement应该很容易编辑,我通过在Xaml文件中编辑它获得了这一点。
为了说明我所希望的,这里有一个例子:
private void LoadUIElementFromCompiledXaml()
{
XmlReader xmlReader = new XmlReader("*Uri for .xaml document within my assembly*");
UIElement elementLoaded = (UIElement)XamlReader.Load(xmlReader);
}
如果答案是显而易见的,我先道歉。
在将Xaml作为嵌入式资源从程序集加载之前,必须做一些设置。我将引导您完成一个示例,然后从那里您可以自定义它以满足您的需求。
- 在项目中创建文件夹。命名为XAML。 在XAML文件夹中添加一个XAML文件。我们把它命名为Sample.xaml。
- 右键单击样本。Xaml并选择属性。将Build Action的值设置为"Embedded Resource"。
- 右键单击项目并选择属性。请注意默认名称空间值。我们将使用它作为路径的一部分。在这个例子中,我们假设它是"MyNamespace. "
加载Xaml资源的代码应该是这样的:
string defaultNamespace = "MyNamespace";
string folderName = "XAML";
string fileName = "Sample.xaml";
string path = String.Format("{0}.{1}.{2}", defaultNamespace, folderName, fileName);
using (Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(path))
{
object root = XamlReader.Load(stream);
}
可以看到,资源的路径由项目的默认名称空间、文件的文件夹路径和文件名组成。如果文件夹路径有多个级别,请使用点代替反斜线作为文件夹分隔符。例如,Xaml'Subfolder将是Xaml.Subfolder.