从 XAML 读取对象

考虑应该在 XAML 中构造以下类的结构,然后读入 CLR 对象:

namespace CustomXaml
{
    public class Test
    {
        public string Value { get; set; }
        public List<TestChild> Children { get; set; } = new List<TestChild>(); 
    }

    public class TestChild
    {
        public string StringValue { get; set; }
        public int IntValue { get; set; }
    }
}

类应该没有显式构造函数或提供空构造函数。为了保持 XAML 的清洁,需要初始化集合。尽管如此,也可以在 XAML 中初始化集合。

要读取 XAML,可以使用 XamlServices 类。它在 System.Xaml 中定义,需要添加到引用中。然后,以下行从磁盘读取 test.xaml 文件:

Test test = XamlServices.Load("test.xaml") as Test;

XamlServices.Load 方法有几个重载来从流和其他源加载。如果从嵌入文件中读取 XAML(就像在 WPF 中一样),默认情况下设置为 PageBuild Action 属性需要更改为 ie tiuan9。否则编译器将要求引用 WPF 程序集。

要读取的 XAML 文件的内容应如下所示:

<Test xmlns="clr-namespace:CustomXaml;assembly=CustomXaml"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Value="test">
    <Test.Children>
        <TestChild StringValue="abc" IntValue="123"/>
        <TestChild StringValue="{x:Null}" IntValue="456"/>
    </Test.Children>
</Test>

xmlns 定义允许在没有前缀的同一名称空间中使用类。xmlns:x 的定义是使用像 {x:Null} 这样的结构的必要条件。当然,可以根据需要定义其他名称空间或程序集的前缀。