WPF應(yīng)用開發(fā)項(xiàng)目教程課件4.2 WPF命令_第1頁
WPF應(yīng)用開發(fā)項(xiàng)目教程課件4.2 WPF命令_第2頁
WPF應(yīng)用開發(fā)項(xiàng)目教程課件4.2 WPF命令_第3頁
WPF應(yīng)用開發(fā)項(xiàng)目教程課件4.2 WPF命令_第4頁
WPF應(yīng)用開發(fā)項(xiàng)目教程課件4.2 WPF命令_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

項(xiàng)目四WPF命令—實(shí)現(xiàn)窗體的清除功能

——任務(wù)二創(chuàng)建使用復(fù)雜命令的程序

定義四個按鈕命令關(guān)聯(lián)后,點(diǎn)擊按鈕彈出相應(yīng)對話框。使用命令關(guān)聯(lián)綁定實(shí)現(xiàn)。一、任務(wù)描述:二、知識準(zhǔn)備:1命令系統(tǒng)的基本元素與關(guān)系1.WPF命令系統(tǒng)由幾個基本元素構(gòu)成,它們是:二、知識準(zhǔn)備:1、命令系統(tǒng)的基本元素與關(guān)系(1)命令(Command):要執(zhí)行的動作。WPF的命令實(shí)際上就是實(shí)現(xiàn)ICommand接口的類,平時(shí)使用最多的是RoutedCommand類。我們還會學(xué)習(xí)使用自定義命令。

(2)命令源(CommandSource):即發(fā)出命令的對象,是實(shí)現(xiàn)了ICommandSource接口的類。很多界面元素都實(shí)現(xiàn)了這個接口,其中包括Button,MenuItem,ListBoxItem等。

1.WPF命令系統(tǒng)由幾個基本元素構(gòu)成,它們是:二、知識準(zhǔn)備:1、命令系統(tǒng)的基本元素與關(guān)系(3)命令目標(biāo)(CommandTarget):即執(zhí)行命令的主體,或者說命令將作用在誰身上。命令目標(biāo)必須是實(shí)現(xiàn)了IInputElement接口的類。(4)命令關(guān)聯(lián)(CommandBinding):映射命令邏輯的對象。負(fù)責(zé)把一些外圍邏輯與命令關(guān)聯(lián)起立,比如執(zhí)行之前對命令是否可以執(zhí)行進(jìn)行判斷,命令執(zhí)行之后還有那些后續(xù)工作等。2.這些元素之間的關(guān)系體現(xiàn)在使用命令的過程中。命令的使用大概分為如下幾步:1、命令系統(tǒng)的基本元素與關(guān)系二、知識準(zhǔn)備:(1)創(chuàng)建命令類:即獲得一個實(shí)現(xiàn)ICommand接口的類,如果命令與具體業(yè)務(wù)邏輯無關(guān)則使用WPF類庫中的RoutedCommand類即可。如果想要與業(yè)務(wù)邏輯相關(guān)的專有命令,則需要創(chuàng)建RoutedCommand的派生類。2.這些元素之間的關(guān)系體現(xiàn)在使用命令的過程中。命令的使用大概分為如下幾步:1、命令系統(tǒng)的基本元素與關(guān)系二、知識準(zhǔn)備:(2)聲明命令實(shí)例:使用命令時(shí)需要創(chuàng)建命令類實(shí)例,一般情況下程序中某類操作只需要一個命令實(shí)例與之對應(yīng)即可。比如對應(yīng)“保存”這個操作,你可以拿同一個實(shí)例去命令每個組件執(zhí)行保存功能,因此程序中的命令多使用單片模式以減少代碼的復(fù)雜程度。1、命令系統(tǒng)的基本元素與關(guān)系二、知識準(zhǔn)備:(3)指定命令源:即指定由誰來發(fā)送這個命令。同一個命令可以有多個源。比如保存命令,可以由菜單中的保存項(xiàng)來發(fā)送,也可以由工具欄中的保存圖標(biāo)來發(fā)送。(4)指定命令目標(biāo):命令目標(biāo)并不是命令的屬性而是命令源的屬性,指定命令目標(biāo)是告訴命令源向那個組件發(fā)送命令,無論這個組件是否擁有焦點(diǎn)它都會收到這個命令。如果沒有命令源指定命令目標(biāo),則WPF系統(tǒng)認(rèn)為當(dāng)前擁有焦點(diǎn)的對象就是命令目標(biāo)。1、命令系統(tǒng)的基本元素與關(guān)系二、知識準(zhǔn)備:(5)指定命令關(guān)聯(lián):WPF命令需要CommandBinding在執(zhí)行前來幫助判斷是不是可以執(zhí)行,在執(zhí)行后做一些事情來“打掃戰(zhàn)場”。WPF命令系統(tǒng)基本元素的關(guān)系圖如圖所示:1、命令系統(tǒng)的基本元素與關(guān)系二、知識準(zhǔn)備:(1)如何指定CommandSources?XAML:(請將“ApplicationCommands.Properties”換成對應(yīng)的ApplicationCommands屬性值,比如:ApplicationCommands.Copy)使用命令的步驟我們已經(jīng)知道,那么,具體到代碼如何來實(shí)現(xiàn)相應(yīng)的步驟么?這里通過回答四個問題來解決。二、知識準(zhǔn)備:<StackPanel>

<StackPanel.ContextMenu>

<ContextMenu>

<MenuItemCommand="ApplicationCommands.Properties"/>

</ContextMenu>

</StackPanel.ContextMenu>

</StackPanel>同等的C#代碼:StackPanel

cmdSourcePanel=newStackPanel();

ContextMenu

cmdSourceContextMenu=newContextMenu();

MenuItem

cmdSourceMenuItem=newMenuItem();cmdSourcePanel.ContextMenu=cmdSourceContextMenu;

cmdSourcePanel.ContextMenu.Items.Add(cmdSourceMenuItem);cmdSourceMenuItem.Command=ApplicationCommands.Properties;二、知識準(zhǔn)備:二、知識準(zhǔn)備:1、命令系統(tǒng)的基本元素與關(guān)系(2)如何指定快捷鍵?XAML代碼:<windows.inputBindings>

<KeyBindingKey="B"

Modifiers="Control"

Command="ApplicationCommands.Open"/>

</windows.inputBindings>同等的C#代碼:KeyGesture

OpenKeyGesture=newKeyGesture(

Key.B,

ModifierKeys.Control);KeyBinding

OpenCmdKeybinding=newKeyBinding(ApplicationCommands.Open,OpenKeyGesture);this.InputBindings.Add(OpenCmdKeybinding);二、知識準(zhǔn)備:二、知識準(zhǔn)備:1、命令系統(tǒng)的基本元素與關(guān)系(3)如何CommandBinding?XAML代碼:<Window.CommandBindings><CommandBindingCommand="ApplicationCommands.Open"

Executed="OpenCmdExecuted"

CanExecute="OpenCmdCanExecute"/>

</Window.CommandBindings>同等的C#代碼:CommandBinding

OpenCmdBinding=newCommandBinding(

ApplicationCommands.Open,

OpenCmdExecuted,

OpenCmdCanExecute);this.CommandBindings.Add(OpenCmdBinding);二、知識準(zhǔn)備:具體的事件處理,C#代碼:voidOpenCmdExecuted(objecttarget,ExecutedRoutedEventArgse){

MessageBox.Show("Thecommandhasbeeninvoked.");

}voidOpenCmdCanExecute(objectsender,CanExecuteRoutedEventArgse)

{

e.CanExecute=true;

}二、知識準(zhǔn)備:具體的事件處理,C#代碼:二、知識準(zhǔn)備:1、命令系統(tǒng)的基本元素與關(guān)系(4)如何設(shè)置CommandTarget并進(jìn)行綁定CommandBinding?XAML代碼:<StackPanel>

<Menu>

<MenuItemCommand="ApplicationCommands.Paste"

CommandTarget="{BindingElementName=mainTextBox}"/>

</Menu>

<TextBoxName="mainTextBox"/>

</StackPanel>同等的C#代碼:StackPanel

mainStackPanel=newStackPanel();

TextBox

mainTextBox=newTextBox();

MenustackPanelMenu=newMenu();

MenuItem

pasteMenuItem=newMenuItem();stackPanelMenu.Items.Add(pasteMenuItem);

mainStackPanel.Children.Add(stackPanelMenu);

mainStackPanel.Children.Add(mainTextBox);pasteMenuItem.Command=ApplicationCommands.Paste;二、知識準(zhǔn)備:以上例子全是單條命令綁定的情形,事實(shí)上,你也可以多個按鈕多條命令綁定到同一控件上,比如:二、知識準(zhǔn)備:<StackPanelOrientation="Horizontal"Height="25">

<ButtonCommand="Cut"CommandTarget="{Binding

ElementName=textBoxInput}"Content="{Binding

RelativeSource={RelativeSourceSelf},Path=Command.Text}“/>

<ButtonCommand="Copy"CommandTarget="{Binding

ElementName=textBoxInput}"Content="{Binding

RelativeSource={RelativeSourceSelf},Path=Command.Text}"/>

<ButtonCommand="Paste"CommandTarget="{Binding

ElementName=textBoxInput}"Content="{Binding

RelativeSource={RelativeSourceSelf},Path=Command.Text}"/>

<ButtonCommand="Undo"CommandTarget="{Binding

ElementName=textBoxInput}"Content="{Binding

RelativeSource={RelativeSourceSelf},Path=Command.Text}"/>二、知識準(zhǔn)備:<ButtonCommand="Redo"CommandTarget="{Binding

ElementName=textBoxInput}"Content="{Binding

RelativeSource={RelativeSourceSelf},Path=Command.Text}"/>

<TextBoxx:Name="textBoxInput"Width="200"/>

</StackPanel>二、知識準(zhǔn)備:要實(shí)現(xiàn)本任務(wù)中各按鈕相應(yīng)的功能,使用命令關(guān)聯(lián),結(jié)合命令系統(tǒng)的基本元素與關(guān)系。三、任務(wù)分析:1.新建WPF項(xiàng)目,名稱為SimpleCommand.xaml。具體布局設(shè)計(jì)代碼如下:<Grid><Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions><ButtonContent="打開"Grid.Row="0"></Button><ButtonContent="新建"Grid.Row="1"></Button><ButtonContent="保存"Grid.Row="2"></Button><ButtonContent="復(fù)制"Grid.Row="3"></Button></Grid>四、任務(wù)實(shí)施:2.將命令源關(guān)聯(lián)到按鈕,代碼如下:<Window.CommandBindings><CommandBindingCommand="ApplicationCommands.Copy"Executed="CommandBinding_Executed"></CommandBinding></Window.CommandBindings>四、任務(wù)實(shí)施:3.從上面的代碼中可以看到,通過Command關(guān)聯(lián)命令對象,當(dāng)應(yīng)用程序執(zhí)行時(shí),會發(fā)現(xiàn)按鈕都是不可用的,變成了不可用狀態(tài)與IsEnable屬性設(shè)置為False一樣。這是因?yàn)榘粹o還沒有關(guān)聯(lián)綁定,我們將關(guān)聯(lián)綁定寫在Window內(nèi)。下面看一下關(guān)聯(lián)綁定后的代碼如下。只以“New”按鈕為例。四、任務(wù)實(shí)施:private

void

Window_Loaded(object

sender,

RoutedEventArgs

e)

{

CommandBindingbinding=newCommandBinding(ApplicationCommands.New);

binding.Executed+=newExecutedRoutedEventHandler(binding_Executed);

this.CommandBindings.Add(binding);

}四、任務(wù)實(shí)施:

voidbinding_Executed(objectsender,ExecutedRoutedEventArgse){

MessageBox.Show("新建");}

四、任務(wù)實(shí)施:3.從上面的代碼中可以看到,在XAML代碼中可以實(shí)現(xiàn)命令綁定。<Window.CommandBindings>

<CommandBinding

Command="ApplicationCommands.Copy"

Executed="CommandBinding_Executed">

</CommandBinding>

</Window

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論