WPF系統中的命令系統

2021-07-06 02:09:06 字數 2046 閱讀 5614

事件不具有約束力,命令與事件的區別就在於命令具有約束力。

命令的使用大概分為以下幾步:

(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 基礎 布局系統

布局系統 術語 布局 描述測量和排列 元素的 集合的成員 然後在螢幕上繪製它們的過程。每當子 改變其位置時,布局系統就可能觸發乙個新的處理過程。簡單地說,布局是乙個遞迴系統,實現在螢幕上對元素進行大小調整 定位和繪製。布局系統為 集合的每個成員完成兩個處理過程 測量處理過程和排列處理過程。不論何時呼...