XamlObjectWriter 和命名空间通过配置(不能使用 XmlnsDefinitionAttribute)
本文关键字:不能 XmlnsDefinitionAttribute 配置 命名空间 XamlObjectWriter | 更新日期: 2023-09-27 18:32:46
我正在使用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,但它不起作用:(
您是否考虑过使用程序集级别 XmlnsDefinitionAttribute?它允许您定义一个映射到一个或多个程序集中的多个 CLR 命名空间的 xmlns。谢谢,罗伯