前面已經介紹瞭如何在XAML中使用WPF中的類來建立基本的用戶界面。但XAML是實例化.NET對象的通用方法,包括那些位於其餘非WPF名稱空間以及本身建立的名稱空間中的對象。函數
建立那些不是用於在XAML窗口中顯示的對象聽起來像是多餘的,但在不少狀況下這是須要的。一個例子是,但使用數據綁定並但願在某個控件上顯示從其餘對象提取的信息時。另一個例子是但願使用非WPF對象爲WPF對象設置屬性時。spa
例如,可以使用數據對象填充WPF的ListBox控件。ListBox控件將調用ToString()方法來獲取文本,以便在列表中顯示每一個條目。code
爲使用未在WPF名稱空間中定義的類。須要將.NET名稱空間映射到XML名稱空間。XAML有一種特殊的語法可用於完成這一工做,該語法以下所示:xml
xmlns:Prefix="clr-namespace:Namespace;assembly=AssemblyName"對象
一般,在XAML文檔的根元素中,在緊隨聲明WPF和XAML名稱空間的特性以後放置這個名稱空間。還須要使用適當的信息填充三個斜體部分,這三部分的含義以下:blog
例如,下面的標記演示瞭如何範圍System名稱空間中的基本類型,並將其映射爲前綴sys:事件
xmlns:sys="clr-namespace:System;assembly=mscorlib"
如今,爲了建立其中一個名稱空間中的類的實例,可以使用名稱空間前綴:文檔
<sys:DateTime>2019-12-30 12:20:00</sys:DateTime>
理想狀況是,但願在XAML中使用的每一個類都有無參構造函數。若是具備無參構造函數,XAML解析器就可建立對應的對象,設置其屬性,並關聯所提供的任何事件處理程序。XAML不支持有參構造函數,並且WPF中的全部元素都包含無參構造函數。此外,須要可以使用公共屬性設置所指望的全部細節。XAML不容許設置公共字段或調用方法。字符串
若是想要使用的類沒有無參構造函數,就有一些限制。若是試圖建立簡單的基本類型(如字符串、日期或數字類型),可提供數據的字符串表示形式做爲標籤中的內容。XAML解析器接着將使用類型轉換器將字符串轉換爲合適的對象。如上面代碼段所示,例舉了一個使用DateTime結構的例子。it
由於DateTime類使用TypeConverter特性將自身關聯到DateTimeConverter類,因此上面的標記能夠湊效。DateTimeConverter類知道這個字符串是合法的DateTime對象,並對其進行轉換。當使用該技術時,不能使用特性爲對象設置任何屬性。
下面示例將全部這些概念融合在一塊兒。將sys前綴映射到System名稱空間,並使用System名稱空間建立三個DateTime對象,而後用這三個DateTime對象填充一個列表:
<Window x:Class="WpfApplication1.DateTimeWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" Title="DateTimeWindow" Height="300" Width="300"> <ListBox> <ListBoxItem> <sys:DateTime>2019-12-30 12:20:00</sys:DateTime> </ListBoxItem> <ListBoxItem> <sys:DateTime>2019-12-31 12:20:00</sys:DateTime> </ListBoxItem> <ListBoxItem> <sys:DateTime>2019-12-3 12:20:00</sys:DateTime> </ListBoxItem> </ListBox> </Window>