Xaml是实例化的,net对象的通用方法,包括那些位于非WPF名称空间下的和本身建立的名称空间中的对象函数
为使用没有在wpf中定义的类,须要将.net名称空间映射到xml名称空间,可使用这样的一特殊的语法来实现这样的工做编码
xmlns:prefix="clr-namespace:Namespace;assembly=assemblName"spa
如System名称空间的类型以下:.net
xmlns:sys="clr-namespace:System;assembly=mscorlib"xml
如今能够建立一个名称空间的类的实例,可以使用名称空间前缀:对象
<local:Myobject..></local:Myobject>事件
tipip
请记住,可以使用任何想要使用的名称空间前缀,只要在整个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,(就是在后台来实现)