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,但它不起作用:(

XamlObjectWriter 和命名空间通过配置(不能使用 XmlnsDefinitionAttribute)

您是否考虑过使用程序集级别 XmlnsDefinitionAttribute?它允许您定义一个映射到一个或多个程序集中的多个 CLR 命名空间的 xmlns。谢谢,罗伯