事件不具有約束力,命令與事件的區別就在於命令具有約束力。
命令的使用大概分為以下幾步:
(1)、建立命令類:即獲得乙個實現icommand介面的類,如果命令與具體業務邏輯無關則使用wpf類庫中的routedcommand類即可。如果與業務邏輯相關的專有命令,則需要建立routedcommand(或者icommand介面)的派生類。
(2)、宣告命令例項:使用命令時需要建立命令類的例項。使用技巧,一般情況下程式中某種操作只需要乙個命令例項與之對應即可。比如對應「儲存」這個操作,你可以拿乙個例項去命令每個元件執行其儲存功能,因此程式中的命令多使用單件模式(singletone pattern)以減少**的複雜度。
(3)、指定命令的源:即指定由誰來傳送這個命令。同乙個命令可以有多個源。
(4)、指定命令目標:命令目標不是命令 的屬性而是命令源的屬性,指定命令目標是告訴命令源向哪個元件傳送命令。如果沒有為命令源指定命令目標,則wpf系統認為當前擁有焦點的物件就是命令目標。
(5)、設定命令關聯:wpf命令需要commandbinding在執行前來幫助判斷是不是可以執行、在執行後做一些事件來「打掃戰場「。
wpf命令系統基本元素的關係圖如下:
下面看乙個例子:
實現這樣乙個需求:定義乙個命令,使用button來傳送這個命令,當命令送達textbox時textbox會被清空(無文字不被傳送)。
xaml介面**如下:
x:class="wpfwindows8.winmain9_1_3"
xmlns=""
xmlns:x=""
xmlns:d=""
xmlns:mc=""
xmlns:local="clr-namespace:wpfwindows8"
mc:ignorable="d"
title="command"
background="lightblue"
height="175"
width="260">
x:name="stackpanel">
x:name="btn1"
content="send command"
margin="5" />
x:name="txtboxa"
margin="5, 0"
height="100" />
stackpanel>
window>
後台**為:
//宣告並定義命令
private routedcommand clearcmd = new routedcommand("clear", typeof(winmain9_1_3));
public
winmain9_1_3()
private
void
initializecommand()
//當命令送達目標後,此方法被呼叫
private
void
cb_executed(object sender, executedroutedeventargs e)
//當探測命令是否可以執行時,此方法被呼叫
private
void
cb_canexecute(object sender, canexecuteroutedeventargs e)
else
//避免繼續向上傳而降低程式效能
e.handled = true;
}
執行程式,在textbox中輸入文字後button在命令可以行狀態的影響下變為可用,此時單機button或者按alr+c,textbox都會被清空,效果如下圖:
WPF之路 WPF布局系統
0,什麼是布局 這是乙個很簡單的問題。簡單來說,就是把一些控制項有條理的擺放在介面上合適的位置,顯然擺的亂七八糟不能算布局。在wpf中,這個條理與winform中略有不同,讓我們看個很簡單的介面 這樣子的介面大家在熟悉不過了。依圖所示,wpf先用藍線 假設的線 將介面劃分為上下兩部分,然後再有紅線劃...
WPF之路 WPF布局系統
前言 前段時間忙了一陣子google earth,這週又忙了一陣子架構師 開題報告,現在終於有時間繼續從helloworld到wpf world 中,我們對wpf有了個大概的了解,並了解了初學wpf時應該從哪些知識點入手。今天我們就從最基本的知識點之一布局系統來繼續學習wpf,主要包括如下內容。0,...
WPF 基礎 布局系統
布局系統 術語 布局 描述測量和排列 元素的 集合的成員 然後在螢幕上繪製它們的過程。每當子 改變其位置時,布局系統就可能觸發乙個新的處理過程。簡單地說,布局是乙個遞迴系統,實現在螢幕上對元素進行大小調整 定位和繪製。布局系統為 集合的每個成員完成兩個處理過程 測量處理過程和排列處理過程。不論何時呼...