1. 程式人生 > WINDOWS開發 >WPF4 事件處理器與程式碼後置

WPF4 事件處理器與程式碼後置

當一個XAML標籤對應一個物件時,這個標籤的一部分Attribute會對應這個物件的Property。除了這部分對應著物件Property的Attribute外,還有一部分Attribute對應著這個物件的事件Event。<Button>標籤有一個名為Click的Attribute,就對應Button類的Click事件。

一、WPF支援在XAML裡為物件的事件指定事件處理器,寫法為:

<ClassName EventName="EventHandlerName">,VS會自動補全這個事件。

<Button Name="btnChild" Click="btnChild_Click
">ShowChild</Button> ... private void btnChild_Click(object sender,RoutedEventArgs e) { Human h = (Human)this.FindResource("human"); MessageBox.Show(h.Name); }

事件處理器的函式宣告與用於宣告Button.Click事件的委託報紙型別和引數上一致

<Button Name="btnChild" Click="btnChild_Click">ShowChild</Button>實際上等價於

Button btnChild=new Button();

btnChild.Click+=new RoutedEventHandler(btnChild_Click);

xaml.cs也被稱為程式碼後置。所有用於實現程式邏輯的程式碼都需要放在後置的C#檔案中。

二、某些時候,會可能把xaml.cs中的程式碼放置xaml檔案中,通過x:Code和<![CDATA[...]]>轉義標籤實現。例如:

        <Button Name="btnXcode" Click="btnXcode_Click">Xcode</Button>
        <x:Code>
            <![CDATA[
                    
private void btnXcode_Click(object sender,RoutedEventArgs e) { MessageBox.Show("xCode with CDATA"); } ]]> </x:Code>

三、匯入程式集和引用其中的名稱空間

每個解決方案都會包含若干個專案,每個專案都可以獨立編譯,編譯結果就是一個程式集(Assembly),而一個解決方案就是一個完整的程式。常見的程式集是以.exe為副檔名的可執行程式或.dll為副檔名的動態連結庫。一般引用其他程式集,都是去引用的dll,所以也一般稱引用程式集為引用類庫。類庫中的類一般放置在合適的名稱空間中,以避免同名類的衝突。比如LibA.dll下的ClassA和LibB.dll下的ClassA,如果LibA.dll中的ClassA在MS名稱空間,另一個在Google名稱空間,就可以MS.ClassA和Google.ClassA來區分引用。

如何在xaml中引用名稱空間?

語法是:

xmlns:對映名="clr-namespace:類庫中名稱空間的名字;assembly=類庫檔名"

比如一個類庫是MyLib.dll,其中包含namespaceA和namespaceB兩個名稱空間,而且也被引入到了WPF專案中,那麼引用語法就是:

xmlns:myspace1="clr-namespace:namespaceA;assembly=MyLib"
xmlns:myspace2="clr-namespace:namespaceB;assembly=MyLib"

具體來說:

xmlns是用於在XAML中宣告名稱空間的Attribute,是xml名稱空間的簡寫

冒號後的對映名可選,但因為不加對映名的預設名稱空間已經被WPF主要名稱空間佔用,所以所引用的名稱空間都需要加上這個對映名。一般是跟隨團隊或名稱空間簡寫或原名。

引號後的字串會由xaml編輯器自動填充。

當使用了引用的名稱空間後,就可以使用其中的類,用法是:

<myspace1:MessagePanel x:Name="Windows1"/>