简介:
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);//居中
}

本文深入探讨了WPF中的预定义命令系统,包括ApplicationCommands、MediaCommands、NavigationCommands、ComponentCommands和EditingCommands。介绍了各命令的功能、默认快捷键及其在XAML中的应用,同时还提供了实现命令绑定和自定义命令的示例。
649

被折叠的 条评论
为什么被折叠?



