繁体   English   中英

如何使用XamlReader从程序集中的Xaml文件加载?

[英]How does use XamlReader to load from a Xaml file from within the assembly?

我已经在stackoverflow和互联网的其余部分找到了一些有关如何从静态文件加载Xaml的文章:他们建议创建一个XmlReader或StreamReader指向文件系统上找到的文件,但是我想要的.xaml文档read from将与程序集的其余部分一起编译,因此它将没有有意义的文件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作为嵌入式资源加载之前,必须进行一些设置。 我将带您看一个示例,然后从那里可以自定义它以满足您的需求。

  1. 在您的项目中创建文件夹。 将其命名为XAML。
  2. 将XAML文件添加到XAML文件夹。 让我们将其称为Sample.xaml。
  3. 右键单击Sample.Xaml并选择属性。 将“生成操作”的值设置为“嵌入式资源”。
  4. 右键单击项目,然后选择属性。 注意默认名称空间值。 我们将使用它作为路径的一部分。 对于此示例,假设它是“ 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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM