WPF使用其它的命名空间(宝典1)

Posted Ant-double

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF使用其它的命名空间(宝典1)相关的知识,希望对你有一定的参考价值。

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)的主要内容,如果未能解决你的问题,请参考以下文章

更改 WPF 项目模板的命名空间

WPF_X命名空间

WPF DataBinding 与其他命名空间/类

WPF 命名空间“System.ComponentModel.Composition”中不存在类型或命名空间名称“CompositionInitializer”

WPF之命名空间

更好地使用 urn 或 url 作为 wpf 中的命名空间