Commands
In WPF, a command is a function or action(f.e,making the selected text bold) that can be bound to an input gesture(user actions,some way that a user provides input to an application,the gestures are all routed events).
four central concepts underlying commands:
The command itself is the action that’s going to be executed;
The source is the object that is invoking the command, such as a button or menu;
The target is the subject that the command is affecting, such as the currently selected text;
Finally, the binding is the object that links the actual implementation of the action to the command.
Built-In Command Libraries in WPF
ApplicationCommands | commonly used commands such as Cut, Copy, Paste, New, Open, Save, Undo, Close etc |
ComponentCommands | for moving around inside an application,more general use than editing commands as well as navigation commands,commands such as MoveDown, ExtendSelectionLeft, ScrollByLine,SelectToEnd,etc |
EditingCommands | helpful for dealing with text,includes commands for alignment, formatting, and the navigation of text,such as ToggleBold, AlignLeft, and DecreaseFontSize |
MediaCommands | commands for controlling audio and video in your applications. Some typical commands are Play,Pause, and IncreaseVolume |
NavigationCommands | useful for navigating in an application built around a web browser metaphor.Commands include BrowseForward, NextPage,PreviousPage, Refresh, and Search. |
<ToggleButton x:Name=”boldButton”
Command=”EditingCommands.ToggleBold”
ToolTip=”Bold”>
<Button Command=”ApplicationCommands.Cut”
ToolTip=”Cut”>
<Image Source=”Icons/cut.png” />
</Button>
Building commands to the menu
<MenuItem Header=”_Edit”>
<MenuItem Command=”ApplicationCommands.Undo” />
<MenuItem Command=”ApplicationCommands.Redo” />
<Separator />
<MenuItem Command=”ApplicationCommands.Cut” />
<MenuItem Command=”ApplicationCommands.Copy” />
<MenuItem Command=”ApplicationCommands.Paste” />
<MenuItem Command=”EditingCommands.Delete” />
</MenuItem>
CommandBindings
is a library of commands available to UIElement and any of its child elements.It's a collection;
map the command bindings to event handlers
MainWindow.xaml:
<Window.CommandBindings>
<CommandBinding Command=”ApplicationCommands.New”
Executed=”NewDocument” />
</Window.CommandBindings>
The command binding must point to an event handler with an ExecutedRoutedEventArgs parameter.
MainWindow.xaml.cs:
private void NewDocument(object sender,ExecutedRoutedEventArgs e)
{
_documentManager.NewDocument(); status.Text = “New Document”;
status.Text = “New Document”;
}
TextEditorMenu.xaml:
<MenuItem Command=”ApplicationCommands.New” />
CanExecute event判断是否可执行
mainwindow.xaml
<CommandBinding Command=”ApplicationCommands.Save”
CanExecute=”SaveDocument_CanExecute”
Executed=”SaveDocument” />
DocumentManager
public bool CanSaveDocument()
{
return !string.IsNullOrEmpty(_currentFile);
}
mainwindow.xaml.cs
private void SaveDocument_CanExecute(object sender,CanExecuteRoutedEventArgs e)
{
e.CanExecute = _documentManager.CanSaveDocument();
}
input binding:
Input bindings are similar to the command bindings,UIElement defines a collection of input bindings that are automatically available to all of the element’s children;
two types,KeyBinding and MouseBinding(KeyBinding is for activating commands with the keyboard,and MouseBinding is for activating them with the mouse);
Gesture attribute
Gesture = MouseAction [+ ModifierKeys]
<Window.InputBindings>
<MouseBinding Gesture=”Control+WheelClick”
Command=”ApplicationCommands.SaveAs” />
</Window.InputBindings>
Key,Modifiers attribute(Key is the required attribute, whereas Modifiers is optional;Modifiers expects a value from the same ModifierKeys enumeration we used in the MouseBinding)
<Window.InputBindings>
<KeyBinding Key=”S”
Modifiers=”Shift”
Command=”ApplicationCommands.SaveAs” />
</Window.InputBindings>
结合标志,可以是"+"也可以是"|";其实,通常情况下,除了ModifiersKeys,wpf中都是使用管道结合标志符。
小结:
到目前为止,已经出现了多种绑定(binding)-databinding、CommandBinding、InputBinding(KeyBinding、MouseBinding).