【WPF學習】第三章 使用其餘名稱空間中的類型

    前面已經介紹瞭如何在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

  • Prefix是但願在XAML標記中用於指示名稱空間的XML前綴。例如,XAML語法使用x前綴。
  • Namespace是徹底限定的.NET名稱空間的名稱。
  • AssemblyName是聲明類型的程序集,沒有.dll擴張名。這個程序集必須在項目中引用。若是但願使用項目程序集,能夠忽略這一部分。

  例如,下面的標記演示瞭如何範圍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>
相關文章
相關標籤/搜索