简介:
WPF 提供一组预定义命令。 命令库包括以下类:ApplicationCommands、NavigationCommands、MediaCommands、EditingCommands 和 ComponentCommands。 这些类提供诸如 Cut、BrowseBack、BrowseForward、Play、Stop 和 Pause 的命令。
许多这些命令都包含一组默认输入绑定。 例如,如果指定应用程序处理 "复制" 命令,则会自动获取键盘绑定 "Ctrl + C"。
使用 XAML 引用各个命令库中的命令时,通常可省略公开静态命令属性的库类的类名。 一般来说,命令名称是明确作为字符串的,且存在所属类型来提供命令的逻辑分组,不过对于消除二义性这并不必要。 例如,可指定 Command="Cut"
等价于Command="ApplicationCommands.Cut"
。
ApplicationCommands 类中的命令以及其他命令库类中的命令,例如 ComponentCommands 和 NavigationCommands,旨在表示应用程序程序员经常遇到的一组常见命令。 命令仅表示 RoutedCommand 的实例,而不表示命令的实现逻辑。 实现逻辑绑定到带有 CommandBinding的命令。 例如,如果对某个控件执行 Close 命令,则该控件可能不会提供执行 Close 命令的逻辑,因此,应用程序编写器将负责编写确定控件如何处理命令的逻辑。
大部分只是预定义命令,具体的实现是要自己编写实现。快捷键会有默认的,例如ApplicationCommands.Open默认对应"Ctrl + O"。如果需要自定义命令,参考:自定义命令。
介绍:
ApplicationCommands | 提供一组与应用程序相关的标准命令。 |
MediaCommands | 提供媒体相关命令的标准集。 |
NavigationCommands | 一组标准的与导航相关的命令,包括浏览器和文档导航。 |
ComponentCommands | 提供一组与组件相关的标准命令,这些命令具有预定义的按键输入笔势和 Text 属性。 |
EditingCommands | 提供一组标准的与编辑相关的命令。 |
CancelPrint | 获取表示“取消打印”命令的值。 |
Close | 获取表示“关闭”命令的值。 |
ContextMenu | 获取表示上下文菜单命令的值。 |
Copy | 获取表示“复制”命令的值。 |
CorrectionList | 获取表示“更正列表”命令的值。 |
Cut | 获取表示“剪切”命令的值。 |
Delete | 获取表示“删除”命令的值。 |
Find | 获取表示 Find 命令的值。 |
Help | 获取表示 Help 命令的值。 |
New | 获取表示 New 命令的值。 |
NotACommand | 表示始终被忽略的命令。 |
Open | 获取表示“打开”命令的值。 |
Paste | 获取表示“粘贴”命令的值。 |
获取表示“打印”命令的值。 | |
PrintPreview | 获取表示“打印预览”命令的值。 |
Properties | 获取表示“属性”命令的值。 |
Redo | 获取表示“重做”命令的值。 |
Replace | 获取表示“替换”命令的值。 |
Save | 获取表示“保存”命令的值。 |
SaveAs | 获取表示“另存为”命令的值。 |
SelectAll | 获取表示“全选”命令的值。 |
Stop | 获取表示“停止”命令的值。 |
Undo | 获取表示“撤销”命令的值。 |
BoostBass | 获取表示“提升基础”命令的值。 |
ChannelDown | 获取表示 Channel Down 命令的值。 |
ChannelUp | 获取表示“频道递增”命令的值。 |
DecreaseBass | 获取表示“降低低音”命令的值。 |
DecreaseMicrophoneVolume | 获取表示 Decrease Microphone Volume 命令的值。 |
DecreaseTreble | 获取表示“降低高音”命令的值。 |
DecreaseVolume | 获取表示“降低音量”命令的值。 |
FastForward | 获取表示 Fast Forward 命令的值。 |
IncreaseBass | 获取表示“提高低音”命令的值。 |
IncreaseMicrophoneVolume | 获取表示“提高麦克风音量”命令的值。 |
IncreaseTreble | 获取表示“提高高音”命令的值。 |
IncreaseVolume | 获取表示“提高音量”命令的值。 |
MuteMicrophoneVolume | 获取表示“将麦克风静音”命令的值。 |
MuteVolume | 获取表示“静音”命令的值。 |
NextTrack | 获取表示“下一曲目”命令的值。 |
Pause | 获取表示“暂停”命令的值。 |
Play | 获取表示“播放”命令的值。 |
PreviousTrack | 获取表示 Previous Track 命令的值。 |
Record | 获取表示“记录”命令的值。 |
Rewind | 获取表示“后退”命令的值。 |
Select | 获取表示“选择”命令的值。 |
Stop | 获取表示“停止”命令的值。 |
ToggleMicrophoneOnOff | 获取表示“打开/关闭麦克风”命令的值。 |
TogglePlayPause | 获取表示“切换播放暂停”命令的值。 |
BrowseBack | 获取表示 |
BrowseForward | 获取表示 |
BrowseHome | 获取表示 |
BrowseStop | 获取表示 |
DecreaseZoom | 获取表示 |
Favorites | 获取表示 |
FirstPage | 获取表示 |
GoToPage | 获取表示 |
IncreaseZoom | 获取表示 |
LastPage | 获取表示 |
NavigateJournal | 获取表示 |
NextPage | 获取表示 |
PreviousPage | 获取表示 |
Refresh | 获取表示 |
Search | 获取表示 |
Zoom | 获取表示 |
ExtendSelectionDown | 获取表示“向下扩展选择”命令的值。 |
ExtendSelectionLeft | 获取表示 Extend Selection Left 命令的值。 |
ExtendSelectionRight | 获取表示 Extend Selection Right 命令的值。 |
ExtendSelectionUp | 获取表示 Extend Selection Up 命令的值。 |
MoveDown | 获取表示“下移”命令的值。 |
MoveFocusBack | 获取表示“焦点后移”命令的值。 |
MoveFocusDown | 获取表示“焦点下移”命令的值。 |
MoveFocusForward | 获取表示 Move Focus Forward 命令的值。 |
MoveFocusPageDown | 获取表示“焦点页下移”命令的值。 |
MoveFocusPageUp | 获取表示“焦点页上移”命令的值。 |
MoveFocusUp | 获取表示“焦点上移”命令的值。 |
MoveLeft | 获取表示“左移”命令的值。 |
MoveRight | 获取表示“右移”命令的值。 |
MoveToEnd | 获取表示“移动到末尾”命令的值。 |
MoveToHome | 获取表示“移动到开头”命令的值。 |
MoveToPageDown | 获取表示“移到下一页”命令的值。 |
MoveToPageUp | 获取表示“移动到上一页”命令的值。 |
MoveUp | 获取表示“向上移动”命令的值。 |
ScrollByLine | 获取表示“按行滚动”命令的值。 |
ScrollPageDown | 获取表示 Scroll Page Down 命令的值。 |
ScrollPageLeft | 获取表示“向左滚动一页”命令的值。 |
ScrollPageRight | 获取表示“向右滚动一页”命令的值。 |
ScrollPageUp | 获取表示“向上滚动页面”命令的值。 |
SelectToEnd | 获取表示“选择到末尾”命令的值。 |
SelectToHome | 获取表示“选择到开头”命令的值。 |
SelectToPageDown | 获取表示“选择下一页”命令的值。 |
SelectToPageUp | 获取表示“选择上一页”命令的值。 |
使用:
1.ApplicationCommands
使用ApplicationCommands.Open
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Open" Executed="command_Execute" CanExecute="command_CanExecute"/>
</Window.CommandBindings>
<Grid>
<StackPanel >
<Button Height="20" Command="ApplicationCommands.Open" Content="{Binding RelativeSource={RelativeSource Mode=Self},Path=Command.Text}"></Button>
</StackPanel>
</Grid>
快捷键设置"Ctrl + O"
<Window.InputBindings>
<KeyBinding Key="O" Modifiers="Ctrl" Command="ApplicationCommands.Open"></KeyBinding>
</Window.InputBindings>
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Open" Executed="command_Execute" CanExecute="command_CanExecute"/>
</Window.CommandBindings>
<Grid>
<StackPanel >
<Button Height="20" Command="ApplicationCommands.Open" Content="{Binding RelativeSource={RelativeSource Mode=Self},Path=Command.Text}"></Button>
</StackPanel>
</Grid>
等价替换
KeyGesture key = new KeyGesture(Key.O, ModifierKeys.Control);
KeyBinding bindingkey = new KeyBinding(ApplicationCommands.Open, key);
this.InputBindings.Add(bindingkey);
CommandBinding bindingCmd = new CommandBinding(ApplicationCommands.Open, command_Execute, command_CanExecute);
this.CommandBindings.Add(bindingCmd);
命令实现
public void command_Execute(object sender, ExecutedRoutedEventArgs e)
{
MessageBox.Show(e.Source.ToString());
e.Handled = true; //停止路由事件传播
}
public void command_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
e.Handled = true;
}
ApplicationCommands的命令本质上是RoutedUICommand
2.MediaCommands
使用Play命令
<Window.CommandBindings>
<CommandBinding Command="MediaCommands.Play" Executed="command_Execute" CanExecute="command_CanExecute"></CommandBinding>
</Window.CommandBindings>
<Grid>
<StackPanel>
<Button Command="MediaCommands.Play" Content="{Binding RelativeSource={RelativeSource Mode=Self},Path=Command.Text}" Height="20"></Button>
</StackPanel>
</Grid>
public void command_Execute(object sender, ExecutedRoutedEventArgs e)
{
MessageBox.Show(e.Source.ToString());
e.Handled = true; //停止路由事件传播
}
public void command_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
e.Handled = true;
}
3.NavigationCommands
<Window.CommandBindings>
<CommandBinding Command="NavigationCommands.Refresh" Executed="command_Execute" CanExecute="command_CanExecute"></CommandBinding>
</Window.CommandBindings>
<Grid>
<StackPanel>
<MenuItem Command="NavigationCommands.Refresh" CommandTarget="{Binding ElementName=frame}"></MenuItem>
<Frame x:Name="frame" NavigationUIVisibility="Hidden" Source="Page1.xaml" Height="200" ></Frame>
</StackPanel>
</Grid>
public void command_Execute(object sender, ExecutedRoutedEventArgs e)
{
this.frame.NavigationUIVisibility = NavigationUIVisibility.Visible;
this.frame.Source = new Uri("Page2.xaml",UriKind.Relative);
}
Page添加
Page的背景色设置
<Grid>
<Border Background="Blue"></Border>
</Grid>
4.ComponentCommands
按钮下移动画
<Window.CommandBindings>
<CommandBinding Command="ComponentCommands.MoveDown" Executed="command_Execute" CanExecute="command_CanExecute"></CommandBinding>
</Window.CommandBindings>
<Canvas>
<Button x:Name="btn" Command="ComponentCommands.MoveDown" Content="{Binding RelativeSource={RelativeSource Mode=Self},Path=Command.Text}" Height="20" Width="50"></Button>
</Canvas>
public void command_Execute(object sender, ExecutedRoutedEventArgs e)
{
DoubleAnimation doubleAnimation = new DoubleAnimation(0, 300, new Duration(TimeSpan.FromSeconds(1)));
Storyboard.SetTarget(doubleAnimation, this.btn);
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath(Canvas.TopProperty));
Storyboard story = new Storyboard();
story.Completed += Story_Completed;
story.Children.Add(doubleAnimation);
story.Begin();
}
private void Story_Completed(object sender, EventArgs e)
{
//完成后
}
5.EditingCommands
- Execute 方法的第一个参数是命令参数。 大多数编辑命令忽略 command 参数;通常为null。第二个参数指定要将命令路由到的对象。 此对象必须实现 IInputElement 接口,并包括指定命令的处理程序。
- RichTextBox支持此命令。如果在不处理命令的对象上调用命令时,不会执行。
如下表示 AlignCenter 命令,该命令请求将当前段落或选中的段落居中。此命令的默认键为
Ctrl
+E
。
<Grid>
<StackPanel>
<RichTextBox x:Name="rtbx"></RichTextBox>
<Button Content="Align Center" Click="Button_Click"></Button>
</StackPanel>
</Grid>
public void Button_Click(object sender, RoutedEventArgs e)
{
EditingCommands.AlignCenter.Execute(null, this.rtbx);//居中
}