WPF使用其它的命名空間(寶典1)

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,(就是在後臺來實現)

相關文章
相關標籤/搜索