Xaml是实例化的,net对象的通用方法,包括那些位于非WPF名称空间下的和自己创建的名称空间中的对象
为使用没有在wpf中定义的类,需要将.net名称空间映射到xml名称空间,可以使用这样的一特殊的语法来实现这样的工作
xmlns:prefix="clr-namespace:Namespace;assembly=assemblName"
如System名称空间的类型如下:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
现在可以创建一个名称空间的类的实例,可使用名称空间前缀:
<local:Myobject..></local:Myobject>
tip
请记住,可使用任何想要使用的名称空间前缀,只要在整个xaml文档中保持一致即可,但sys和local前缀通常在导入system名称空间和当前项目的名称空间使用。
理想的情况是,希望在xaml中使用的每个类都有无参构造函数,如果具有无参构造函数,xaml解析器就可创建对应的对象,设置其属性,并关联所提供的任何事件处理程序,xaml不支持有参构造函数
而且wpf中的所有的元素都包含无参构造函数,此外,需要能够使用公共属性设置你所期望的所有的细节xaml不允许设置公共字段或调用方法
如果想要使用的类没有无参构造函数,就有一些限制,如果试图创建简单的基本类型,可提供数据的字符串表示形式作为标签中的内容,xaml解析器接着使用类型转换器将字符串转换为合适的对象如下:
<sys:DateTime>10/20/2016 4:30 PM</sys:DateTime>
因为DateTime类使用TypeConverter特性将自身关联到DateTimeConverter类所以上面的标记可以奏效。DateTimeConverter类知道这个字符串是合法的DateTime对象,并对其进行转换,当使用这种技术时,不能使用特征
为你的对象设置任何属性
如果类没有无参的构造函数,也没有合适的类型转换器,那就不能成功的
解决方法
1/创建自定义的封装器来克服这些限制。但这样的硬编码会使用异常难以定位
2/使用事件处理代码来控制对象,而完全不使用xaml,(就是在后台来实现)
WPF使用其它的命名空间(宝典1)
,