在WPF中,命令是一个独立的操作,把这个操作分离出来的作用是增强程序的灵活性。命令适合那些不依赖某固定对象的操作,不管理是调用操作还是执行操作的对象。

如下图,复制命令是个相对独立的操作,不管是按钮,菜单还是快捷来调用这个命令都是可以的,复制命令执行时需要有选中的内容,也就是执行的对象。图中的文本或列表都是执行的对象,这时,复制操作定义成命令是一个很好的选择,因为这样把复制操作与调用方与执行对象进行了分离。

WPF中的命令(一)_命令

代码如下:

<Grid MouseDown="Grid_MouseDown">

<StackPanel>

<Button Content="复制" Command="ApplicationCommands.Copy" CommandTarget="{Binding ElementName=tb1}"></Button>

<TextBox Name="tb1" ;97" Text="234" Height="73" />

</StackPanel>

</Grid>

调用操作的对象是Button,执行操作的对象是TextBox,复制是操作。

在WPF中命令有四部分组成:命令,命令源,命令目标,命令绑定

在上例中,ApplicationCommands.Copy操作是命令,Button是命令源,也即调用操作的对象,TextBox是命令目标,命令绑定由TextBox提供。

一、命令

命令可以分为系统预定义命令,和自定义命令。

系统预定义命令有:

1. MediaCommands

名称

说明

BoostBass

获取表示“增强低音”命令的值。

ChannelDown

获取表示“频道递减”命令的值。

ChannelUp

获取表示“频道递增”命令的值。

DecreaseBass

获取表示“降低低音”命令的值。

DecreaseMicrophoneVolume

获取表示“降低麦克风音量”命令的值。

DecreaseTreble

获取表示“降低高音”命令的值。

DecreaseVolume

获取表示“降低音量”命令的值。

FastForward

获取表示“快进”命令的值。

IncreaseBass

获取表示“提高低音”命令的值。

IncreaseMicrophoneVolume

获取表示“提高麦克风音量”命令的值。

IncreaseTreble

获取表示“提高高音”命令的值。

IncreaseVolume

获取表示“提高音量”命令的值。

MuteMicrophoneVolume

获取表示“将麦克风静音”命令的值。

MuteVolume

获取表示“静音”命令的值。

NextTrack

获取表示“下一曲目”命令的值。

Pause

获取表示“暂停”命令的值。

Play

获取表示“播放”命令的值。

PreviousTrack

获取表示“上一曲目”命令的值。

Record

获取表示“录制”命令的值。

Rewind

获取表示“后退”命令的值。

Select

获取表示“选择”命令的值。

Stop

获取表示“停止”命令的值。

ToggleMicrophoneOnOff

获取表示“打开/关闭麦克风”命令的值。

TogglePlayPause

获取表示“切换播放暂停”命令的值。

2. ApplicationCommands

名称

说明

CancelPrint

获取表示“取消打印”命令的值。

Close

获取表示“关闭”命令的值。

ContextMenu

获取表示“上下文菜单”命令的值。

Copy

获取表示“复制”命令的值。

CorrectionList

获取表示“集合列表”命令的值。

Cut

获取表示“剪切”命令的值。

Delete

获取表示“删除”命令的值。

Find

获取表示“查找”命令的值。

Help

获取表示“帮助”命令的值。

New

获取表示“新建”命令的值。

NotACommand

表示始终被忽略的命令。

Open

获取表示“打开”命令的值。

Paste

获取表示“粘贴”命令的值。

Print

获取表示“打印”命令的值。

PrintPreview

获取表示“打印预览”命令的值。

Properties

获取表示“属性”命令的值。

Redo

获取表示“重复”命令的值。

Replace

获取表示“替换”命令的值。

Save

获取表示“保存”命令的值。

SaveAs

获取表示“另存为”命令的值。

SelectAll

获取表示“全选”命令的值。

Stop

获取表示“停止”命令的值。

Undo

获取表示“撤消”命令的值。

3. NavigationCommands

名称

说明

BrowseBack

获取表示 Browse Back 命令的值。

BrowseForward

获取表示 Browse Forward 命令的值。

BrowseHome

获取表示 Browse Home 命令的值。

BrowseStop

获取表示 Browse Stop 命令的值。

DecreaseZoom

获取表示 Decrease Zoom 命令的值。

Favorites

获取表示 Favorites 命令的值。

FirstPage

获取表示 First Page 命令的值。

GoToPage

获取表示 Go To Page 命令的值。

IncreaseZoom

获取表示 Increase Zoom 命令的值。

LastPage

获取表示 Last Page 命令的值。

NavigateJournal

获取表示 Navigate Journal 命令的值。

NextPage

获取表示 Next Page 命令的值。

PreviousPage

获取表示 Previous Page 命令的值。

Refresh

获取表示 Refresh 命令的值。

Search

获取表示 Search 命令的值。

Zoom

获取表示 Zoom 命令的值。

4. ComponentCommands

名称

说明

ExtendSelectionDown

获取表示“向下扩展选择”命令的值。

ExtendSelectionLeft

获取表示“向左扩展选择”命令的值。

ExtendSelectionRight

获取表示“向右扩展选择”命令的值

ExtendSelectionUp

获取表示“向上扩展选择”命令的值。

MoveDown

获取表示“下移”命令的值。

MoveFocusBack

获取表示“向后移动焦点”命令的值。

MoveFocusDown

获取表示“向下移动焦点”命令的值。

MoveFocusForward

获取表示“向前移动焦点”命令的值。

MoveFocusPageDown

获取表示“将焦点下移一页”命令的值。

MoveFocusPageUp

获取表示“将焦点上移一页”命令的值。

MoveFocusUp

获取表示“向上移动焦点”命令的值。

MoveLeft

获取表示“左移”命令的值。

MoveRight

获取表示“右移”命令的值。

MoveToEnd

获取表示“移至结尾”命令的值。

MoveToHome

获取表示“移至开头”命令的值。

MoveToPageDown

获取表示“移到下一页”命令的值。

MoveToPageUp

获取表示“移到上一页”命令的值。

MoveUp

获取表示“上移”命令的值。

ScrollByLine

获取表示“按行滚动”命令的值。

ScrollPageDown

获取表示“向下滚动一页”的值。

ScrollPageLeft

获取表示“向左滚动一页”命令的值。

ScrollPageRight

获取表示“向右滚动一页”命令的值。

ScrollPageUp

获取表示“向上滚动一页”的值。

SelectToEnd

获取表示“选择到末尾”命令的值。

SelectToHome

获取表示“选择到开头”命令的值。

SelectToPageDown

获取表示“向下选择一页”命令的值。

SelectToPageUp

获取表示“向上选择一页”命令的值。

5. EditingCommands

名称

默认键笔势

说明

AlignCenter

Ctrl+ E

表示 AlignCenter 命令,该命令请求将当前段落或选中的段落居中。

AlignJustify

Ctrl+ J

表示 AlignJustify 命令,该命令请求将当前段落或选中的段落两端对齐。

AlignLeft

Ctrl+ L

表示 AlignLeft 命令,该命令请求将所选内容左对齐。

AlignRight

Ctrl+ R

表示 AlignRight 命令,该命令请求将所选内容右对齐。

Backspace

Backspace

表示 Backspace 命令,该命令请求在当前位置或当前所选内容上输入一个退格。

CorrectSpellingError

无默认键笔势

表示 CorrectSpellingError 命令,该命令请求更正当前位置任何拼写错误的单词。

DecreaseFontSize

Ctrl+ OemOpenBrackets

表示 DecreaseFontSize 命令,该命令请求将当前所选内容的字号缩小 1 磅。

DecreaseIndentation

Ctrl+ Shift+ T

表示 DecreaseIndentation 命令,该命令请求将当前段落的缩进减少一个制表位。

Delete

Delete

表示 Delete 命令,该命令请求删除当前所选内容。

DeleteNextWord

Ctrl+ Delete

表示 DeleteNextWord 命令,该命令请求删除下一单词(相对于当前位置而言)。

DeletePreviousWord

Ctrl+ Backspace

表示 DeletePreviousWord 命令,该命令请求删除上一单词(相对于当前位置而言)。

EnterLineBreak

Shift+ Enter

表示 EnterLineBreak 命令,该命令请求在当前位置或当前所选内容上插入一个换行符。

EnterParagraphBreak

Enter

表示 EnterParagraphBreak 命令,该命令请求在当前位置或当前所选内容上插入一个分段符。

IgnoreSpellingError

无默认键笔势

表示 IgnoreSpellingError 命令,该命令请求忽略当前位置或当前所选内容中任何拼写错误的单词的实例。

IncreaseFontSize

Ctrl+

OemCloseBrackets

表示 IncreaseFontSize 命令,该命令请求将当前所选内容的字号增加 1 磅。

IncreaseIndentation

Ctrl+ T

表示 IncreaseIndentation 命令,该命令请求将当前段落的缩进增加一个制表位。

MoveDownByLine

Down

表示 MoveDownByLine 命令,该命令请求将插入符号向下移动一行。

MoveDownByPage

PageDown

表示 MoveDownByPage 命令,该命令请求将插入符号向下移动一页。

MoveDownByParagraph

Ctrl+ Down

表示 MoveDownByParagraph 命令,该命令请求将插入符号向下移动一个段落。

MoveLeftByCharacter

Left

表示 MoveLeftByCharacter 命令,该命令请求将插入符号向左移动一个字符。

MoveLeftByWord

Ctrl+ Left

表示 MoveLeftByWord 命令,该命令请求将插入符号向左移动一个单词。

MoveRightByCharacter

Right

表示 MoveRightByCharacter 命令,该命令请求将插入符号向右移动一个字符。

MoveRightByWord

Ctrl+ Right

表示 MoveRightByWord 命令,该命令请求将插入符号向右移动一个单词。

MoveToDocumentEnd

Ctrl+ End

表示 MoveToDocumentEnd 命令,该命令请求将插入符号移至内容的末尾。

MoveToDocumentStart

Ctrl+ Home

表示 MoveToDocumentStart 命令,该命令请求将插入符号移至内容的开头。

MoveToLineEnd

End

表示 MoveToLineEnd 命令,该命令请求将插入符号移至当前行的末尾。

MoveToLineStart

Home

表示 MoveToLineStart 命令,该命令请求将插入符号移至当前行的开头。

MoveUpByLine

Up

表示 MoveUpByLine 命令,该命令请求将插入符号向上移动一行。

MoveUpByPage

PageUp

表示 MoveUpByPage 命令,该命令请求将插入符号向上移动一页。

MoveUpByParagraph

Ctrl+ Up

表示 MoveUpByParagraph 命令,该命令请求将插入符号向上移动一个段落。

SelectDownByLine

Shift+ Down

表示 SelectDownByLine 命令,该命令请求将当前选择范围向下扩展一行。

SelectDownByPage

Shift+ PageDown

表示 SelectDownByPage 命令,该命令请求将当前选择范围向下扩展一页。

SelectDownByParagraph

Ctrl+ Shift+ Down

表示 SelectDownByParagraph 命令,该命令请求将当前选择范围向下扩展一段。

SelectLeftByCharacter

Shift+ Left

表示 SelectLeftByCharacter 命令,该命令请求将当前选择范围向左扩展一个字符。

SelectLeftByWord

Ctrl+ Shift+ Left

表示 SelectLeftByWord 命令,该命令请求将当前选择范围向左扩展一个单词。

SelectRightByCharacter

Shift+ Right

表示 SelectRightByCharacter 命令,该命令请求将当前选择范围向右扩展一个字符。

SelectRightByWord

Ctrl+ Shift+ Right

表示 SelectRightByWord 命令,该命令请求将当前选择范围向右扩展一个单词。

SelectToDocumentEnd

Ctrl+ Shift+ End

表示 SelectToDocumentEnd 命令,该命令请求将当前选择范围扩展到内容末尾处。

SelectToDocumentStart

Ctrl+ Shift+ Home

表示 SelectToDocumentStart 命令,该命令请求将当前选择范围扩展到内容开头处。

SelectToLineEnd

Shift+ End

表示 SelectToLineEnd 命令,该命令请求将当前选择范围扩展到当前行的末尾。

SelectToLineStart

Shift+ Home

表示 SelectToLineStart 命令,该命令请求将当前选择范围扩展到当前行的开头。

SelectUpByLine

Shift+ Up

表示 SelectUpByLine 命令,该命令请求将当前选择范围向上扩展一行。

SelectUpByPage

Shift+ PageUp

表示 SelectUpByPage 命令,该命令请求将当前选择范围向上扩展一页。

SelectUpByParagraph

Ctrl+ Shift+ Up

表示 SelectUpByParagraph 命令,该命令请求将当前选择范围向上扩展一段。

TabBackward

Shift+ Tab

表示 TabBackward 命令。

TabForward

Tab

表示 TabForward 命令。

ToggleBold

Ctrl+ B

表示 ToggleBold 命令,该命令请求对当前所选内容进行 Bold 格式切换。

ToggleBullets

Ctrl+ Shift+ L

表示 ToggleBullets 命令,该命令请求对当前所选内容进行无序列表(也称为项目符号列表)格式切换。

ToggleInsert

Insert

表示 ToggleInsert 命令,该命令用于切换“插入”和“改写”键入模式。

ToggleItalic

Ctrl+ I

表示 ToggleItalic 命令,该命令请求对当前所选内容进行 Italic 格式切换。

ToggleNumbering

Ctrl+ Shift+ N

表示 ToggleNumbering 命令,该命令请求对当前所选内容进行排序列表(也称为编号列表)格式切换。

ToggleSubscript

Ctrl+ OemPlus

表示 ToggleSubscript 命令,该命令请求对当前所选内容进行下标格式切换。

ToggleSuperscript

Ctrl+ Shift+OemPlus

表示 ToggleSuperscript 命令,该命令请求对当前所选内容进行上标格式切换。

ToggleUnderline

Ctrl+ U

表示 ToggleUnderline 命令,该命令请求对当前所选内容进行 Underline 格式切换。

命令也可以自定义,可以实接口ICommand,也可以创建自定义类,类中存放RoutedCommand或RoutedUICommand静态字段或属性。

我们使用后都来构造自定义命令:

首先定义一个类:在这个类中用一个ICommand的子类,RoutedUICommand继承自RoutedCommand,RoutedCommand继承自ICommand。并且RoutedUICommand定义的字段是静态的。

class MyCommand

{

public static RoutedUICommand MyRCom;

static MyCommand()

{

InputGestureCollection inputs = new InputGestureCollection();

inputs.Add(new KeyGesture(Key.A, ModifierKeys.Control));

inputs.Add(new MouseGesture(MouseAction.LeftDoubleClick, ModifierKeys.Control));//添加的两种输入操作

MyRCom = new RoutedUICommand("自定义命令", "MyRCom", typeof(MyCommand), inputs);

}

}

其实在XAML层给数据源设置命令:

<Window x:Class="WpfApplication1.MainWindow"

xmlns:w="clr-namespace:WpfApplication1;assembly=WpfApplication1"

>

<Grid>

<StackPanel>

<Button Command="w:MyCommand.MyRCom" Content="按钮"/>

</StackPanel>

</Grid>

</Window>

接下进行命令绑定,在窗体的构造函数里加入

public MainWindow()

{

InitializeComponent();

CommandBinding cmdbing = new CommandBinding(MyCommand.MyRCom);

cb.Executed += TestMethod;

this.CommandBindings.Add(cmdbing);

}

void TestMethod (object sender, ExecutedRoutedEventArgs e)

{

MessageBox.Show(“执行结果”);

}