我使用Systeml.Xaml创建基于XAML的自定义布局引擎。由于它是跨平台的,95%的类型是在便携式类库中定义的,因此无法使用XmlnsDefinitionAttribute来装饰"默认程序集。
我想使用XamlReader来读取我的XAML格式的文件。问题是我的对象属于几个名称空间。目前,如果我希望XamlReader能够实例化每一个,我必须指定每个对象从哪个命名空间:
<Window Title="Title" xmlns="clr-namespace:Perspex.Win32;assembly=Perspex.Win32"
xmlns:r="clr-namespace:Perspex;assembly=Perspex.Base">
<Window.Content>
<TextBlock xmlns="clr-namespace:Perspex.Controls;assembly=Perspex.Controls" Text="{r:Binding}" />
</Window.Content>
</Window>
如何让XamlReader拥有一组隐含的默认命名空间,以便在不指定命名空间的情况下发现它们?
编辑:我现有的代码就是这个。我在XamlXmlReader上使用它。
private static object Load(XmlReader reader)
{
XamlXmlReader xamlXmlReader = new XamlXmlReader(reader, xamlSchemaContext);
XamlObjectWriter writer = new XamlObjectWriter(
xamlSchemaContext,
new XamlObjectWriterSettings
{
XamlSetValueHandler = SetValue,
});
while (xamlXmlReader.Read())
{
writer.WriteNode(xamlXmlReader);
}
object result = writer.Result;
return result;
}
正如您所看到的,我尝试使用带有一些默认程序集的XamlSchemaContext,但它不起作用:(
答案 0 :(得分:1)
您是否考虑过使用程序集级别XmlnsDefinitionAttribute?它允许您定义一个映射到一个或多个程序集中的多个CLR名称空间的xmlns。 谢谢,Rob