WPF学习系列012: 2.7.4 XAML 扩展部分

来源:互联网 发布:java中什么叫联合测试 编辑:程序博客网 时间:2024/05/22 00:49

 

  •  
    1. 可以在 XAML 中使用任何类型的.NET对象(甚至是COM对象),也可以使用自己定义的对象,无论这些对象是不是与用户界面有关。对象必须以“友好声明”(declarative-friendly)的方式进行设计。
    2. 对于不是专门为 XAML 设计的程序集,仍然可以在 XAML 中使用。
    1. 当转换子元素时,任何一个有效的 XAML 解析器或者编译器必须遵循下面的规则:
      1. 如果该类型实现了 IList  接口,就为每个子元素调用 IList.Add
      2. 否则,如果该类型实现了 IDictionary 接口,就为每个子元素调用 IDictionary.Add,在该值的键和元素中使用 x:Key 的特性值
      3. 否则,如果父元素支持内容属性,而且子元素的类型与该内容属性是兼容的,就把子元素作为它的属性值
      4. 否则,如果子对象是普通文本,且有类型转换器将子对象转换为父类型(没有在父元素上设置属性),则把子元素作为类型转换器的输入,将输出作为父对象的实例
      5. 其它情况,则抛出一个错误
  • 2.7.4 XAML 扩展部分

    例如:

    mscorlib.dll 中的 .NET Framework API

    System.Collections.Hashtable h = new System.Collections.Hashtable();

    h.Add("key1", 7);

    h.Add("key2", 23);

    如果要在 XAML 中引用上面程序集中的 API,可以表示为:

    <collections:Hashtable

    xmlns:collections="clr-namespace:System.Collections;assembly=mscorlib"

    xmlns:sys="clr-namespace:System;assembly=mscorlib"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <sys:Int32 x:Key="key1">7</sys:Int32>

    <sys:Int32 x:Key="key2">23</sys:Int32>

    </collections:Hashtable>

    其中:clr-namespace标记允许直接在 XAML 中放入一个 .NET 命名空间。

原创粉丝点击