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

 

  •  
    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 命名空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值