在WPF中,许多控件都自动集成了固有的命令集。比如文本框TextBox就提供了复制(Copy),粘贴(Paste),裁切(Cut),撤消(Undo)和重做(Redo)命令等。

WPF提供常用应用程序所用的命令集,常用的命令集包括:ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommands和EditingCommands

ApplicationCommands(应用程序命令):  CancelPrint:取消打印  Close:关闭  ContextMenu:上下文菜单  Copy:复制  CorrectionList: Gets the value that represents the Correction List command.    Cut:剪切  Delete:删除  Find:查找  Help:帮助  New:新建  NotACommand:不是命令,被忽略  Open:打开  Paste:粘贴  Print:打印  PrintPreview:打印预览  Properties:属性  Redo:重做  Replace:取代  Save:保存  SaveAs:另存为  SelectAll:选择所有的  Stop:停止  Undo:撤消

ComponentCommands(组件命令):  ExtendSelection:后接Down/Left/Right/Up, 比如:ExtendSelectionDown(Shift+Down,Extend Selection Down),ExtendSelectionLeft等  Move:后接Down/Left/Right/Up, 如:MoveDown  MoveFocus:后接Down/Forward/Back/Up, 如:MoveFocusDown  MoveFocusPage:后接Down/Up,如:MoveFocusPageUp  MoveTo:后接End/Home/PageDown/PageUp,比如:MoveToPageDown  ScrollByLine  ScrollPage:后接Down/Left/Right/Up,比如:ScrollPageLeft  SelectTo:End/Home/PageDown/PageUp,比如:SelectToEnd

NavigationCommands(导航命令):  Browse浏览: 后接Back/Forward/Home/Stop, 比如:BrowseBack  缩放显示:DecreaseZoom, IncreaseZoom, Zoom  Favorites(收藏)  页面:FirstPage, LastPage, PreviousPage, NextPage,GoToPage  NavigateJournal  Refresh(刷新)  Search(搜索)

MediaCommands(多媒体控制命令):  Treble高音:DecreaseTreble,IncreaseTreble  Bass低音:BoostBass,DecreaseBass,IncreaseBass  Channel频道:ChannelDown,ChannelUp  MicrophoneVolume麦克风音量调节:DecreaseMicrophoneVolume,IncreaseMicrophoneVolume,MuteMicrophoneVolume  ToggleMicrophoneOnOff:麦克风开关  Volume音量: DecreaseVolume,IncreaseVolume,MuteVolume  Rewind, FastForward(回放,快进)  Track轨道:PreviousTrack,NextTrack [上一段(节)]  Play,Pause,Stop,Record(播放,暂停,停止,录制)  TogglePlayPause  Select选择

EditingCommands(编辑/排版类命令):  Align对齐:AlignCenter,AlignJustify,AlignLeft,AlignRight(居中,撑满,左对齐,右对齐)  Backspace退格  TabForward,TabBackward(Tab前缩,Tab向后)  FontSize字体大小:DecreaseFontSize,IncreaseFontSize  Indentation缩排:DecreaseIndentation, IncreaseIndentation  Delete删除: Delete选中部分,DeleteNextWord:删除后一字,DeletePreviousWord:删除前一字  EnterLineBreak:换行  EnterParagraphBreak:换段  CorrectSpellingError/IgnoreSpellingError:纠正/忽略拼写错误  MoveUpByLine,MoveDownByLine: 上/下移一行,  MoveUpByPage,MoveDownByPage: 上/下移一页  MoveUpByParagraph,MoveDownByParagraph: 上/下移一段  MoveLeftByCharacter/MoveRightByCharacter:左/右移一字符  MoveLeftByWord/MoveRightByWord 左/右移一词  MoveToDocumentStart/MoveToDocumentEnd:到文章开头/结尾  MoveToLineStart/MoveToLineEnd:到一行的开头/结尾  SelectUpByLine,SelectDownByLine:向上/下选一行  SelectUpByPage,SelectDownByPage:向上/下选一页  SelectUpByParagraph,SelectDownByParagraph:向上/下选一段  SelectLeftByCharacter,SelectRightByCharacter:向左/右选中一字  SelectLeftByWord,SelectRightByWord:向左/右选中一词  SelectToDocumentStart,SelectToDocumentEnd: 选中到篇头/篇尾  SelectToLineStart/SelectToLineEnd:选中到行首/行尾  ToggleBold, ToggleItalic, ToggleUnderline(加粗,斜体,下划线)  ToggleBullets, ToggleNumbering(列表:加点,加数字)  ToggleInsert:插入  ToggleSuperscript,ToggleSubscript(上标字,下标字)

先来举一个简单的例子:

XAML代码: <StackPanel>   <Menu>     <MenuItem Command="ApplicationCommands.Paste" />   </Menu>   <TextBox /> </StackPanel>

C#代码: StackPanel mainStackPanel = new StackPanel(); TextBox pasteTextBox = new TextBox(); Menu stackPanelMenu = new Menu(); MenuItem pasteMenuItem = new MenuItem();

stackPanelMenu.Items.Add(pasteMenuItem); mainStackPanel.Children.Add(stackPanelMenu); mainStackPanel.Children.Add(pasteTextBox);

pasteMenuItem.Command = ApplicationCommands.Paste;

上面代码演示了将对文本框设置为焦点时,菜单项可用,点击菜单项时,将执行粘贴命令。
下面列出关于Command的四个概念和四个小问题: 1、WPF中Command(命令)的四个概念: (1)命令command:要执行的动作。 (2)命令源command source:发出命令的对象(继承自ICommandSource)。 (3)命令目标command target:执行命令的主体 (4)命令绑定command binding:映射命令逻辑的对象 比如在上面示例中,粘贴(Paste)就是命令(command), 菜单项(MenuItem)是命令源(command source), 文本框(TextBox)是命令目标对象(command target), 命令绑定到command binding文本框(TextBox)控件上。

提示:WPF中的命令都继承自ICommand接口。ICommand暴露两个方法:Execute方法、 CanExecute方法和一个事件:CanExecuteChanged。 继承自ICommandSource的有:ButtonBase, MenuItem, Hyperlink和InputBinding。 而Button,GridViewColumnHeader,ToggleButton,RepeatButton继承自ButtonBase。System.Windows.Input.KeyBinding和MouseBinding继承自InputBinding。

2、四个小问题: (1)如何指定Command Sources? XAML:(请将“ApplicationCommands.Properties”换成对应的ApplicationCommands属性值,比如:ApplicationCommands.Copy) <StackPanel>   <StackPanel.ContextMenu>     <ContextMenu>       <MenuItem Command="ApplicationCommands.Properties" />     </ContextMenu>   </StackPanel.ContextMenu> </StackPanel>

同等的C#代码: StackPanel cmdSourcePanel = new StackPanel(); ContextMenu cmdSourceContextMenu = new ContextMenu(); MenuItem cmdSourceMenuItem = new MenuItem();

cmdSourcePanel.ContextMenu = cmdSourceContextMenu; cmdSourcePanel.ContextMenu.Items.Add(cmdSourceMenuItem);

cmdSourceMenuItem.Command = ApplicationCommands.Properties;

(2)如何指定快捷键?

XAML代码: <Window.InputBindings>   <KeyBinding Key="B"               Modifiers="Control"                Command="ApplicationCommands.Open" /> </Window.InputBindings>

C#代码: KeyGesture OpenKeyGesture = new KeyGesture(     Key.B,     ModifierKeys.Control);

KeyBinding OpenCmdKeybinding = new KeyBinding(ApplicationCommands.Open,OpenKeyGesture); this.InputBindings.Add(OpenCmdKeybinding); //也可以这样(下面一句与上面两句的效果等同): //ApplicationCommands.Open.InputGestures.Add(OpenKeyGesture);   (3)如何Command Binding? XAML代码: <Window.CommandBindings>   <CommandBinding Command="ApplicationCommands.Open"                   Executed="OpenCmdExecuted"                   CanExecute="OpenCmdCanExecute"/> </Window.CommandBindings>

C#代码: CommandBinding OpenCmdBinding = new CommandBinding(     ApplicationCommands.Open,     OpenCmdExecuted,     OpenCmdCanExecute);

this.CommandBindings.Add(OpenCmdBinding);

具体的事件处理: C#代码: void OpenCmdExecuted(object target, ExecutedRoutedEventArgs e) {     MessageBox.Show("The command has been invoked."); }

void OpenCmdCanExecute(object sender, CanExecuteRoutedEventArgs e) {     e.CanExecute = true; }

(4)如何设置Command Target并进行绑定Command Binding? XAML代码: <StackPanel>   <Menu>     <MenuItem Command="ApplicationCommands.Paste"               CommandTarget="{Binding ElementName=mainTextBox}" />   </Menu>   <TextBox Name="mainTextBox"/> </StackPanel>   C#代码: StackPanel mainStackPanel = new StackPanel(); TextBox mainTextBox= new TextBox(); Menu stackPanelMenu = new Menu(); MenuItem pasteMenuItem = new MenuItem();

stackPanelMenu.Items.Add(pasteMenuItem); mainStackPanel.Children.Add(stackPanelMenu); mainStackPanel.Children.Add(mainTextBox);

pasteMenuItem.Command = ApplicationCommands.Paste;

以上例子全是单条命令绑定的情形,事实上,你也可以多个按钮多条命令绑定到同一控件上,比如: <StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Orientation="Horizontal" Height="25"> <Button Command="Cut" CommandTarget="{Binding ElementName=textBoxInput}" Content="{Binding RelativeSource={RelativeSource Self}, Path=Command.Text}"/> <Button Command="Copy" CommandTarget="{Binding ElementName=textBoxInput}" Content="{Binding RelativeSource={RelativeSource Self}, Path=Command.Text}"/> <Button Command="Paste" CommandTarget="{Binding ElementName=textBoxInput}" Content="{Binding RelativeSource={RelativeSource Self}, Path=Command.Text}"/> <Button Command="Undo" CommandTarget="{Binding ElementName=textBoxInput}" Content="{Binding RelativeSource={RelativeSource Self}, Path=Command.Text}"/> <Button Command="Redo" CommandTarget="{Binding ElementName=textBoxInput}" Content="{Binding RelativeSource={RelativeSource Self}, Path=Command.Text}"/> <TextBox x:Name="textBoxInput" Width="200"/> </StackPanel>
最后,贴出一个完整点的例子:

XAML代码: <Window     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     x:Class="WPFCommand.Window1"     Title="MenuItemCommandTask"  x:Name="Window"  Width="500"  Height="400"     > <Window.CommandBindings>   <CommandBinding Command="ApplicationCommands.Open"                   Executed="OpenCmdExecuted"                   CanExecute="OpenCmdCanExecute"/> <CommandBinding Command="Help" CanExecute="HelpCanExecute" Executed="HelpExecuted" /> </Window.CommandBindings> <Window.InputBindings>   <KeyBinding Command="HelpKey="F2" />   <KeyBinding Command="NotACommand" Key="F1" /> </Window.InputBindings>     <Canvas>       <Menu DockPanel.Dock="Top">         <MenuItem Command="ApplicationCommands.Paste" Width="75" />       </Menu>       <TextBox BorderBrush="Black" BorderThickness="2" TextWrapping="Wrap" Text="这个TextBox未成为焦点之前,粘贴菜单不可用。" Width="476" Height="41" Canvas.Left="8" Canvas.Top="25"/>    <Button Command="ApplicationCommands.Open" Height="32" Width="223" Content="测试弹出对话框" Canvas.Left="8" Canvas.Top="70"/>     </Canvas> </Window>

对应的C#代码: using System; using System.IO; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Navigation;

namespace WPFCommand {  public partial class Window1  {   public Window1()   {    this.InitializeComponent();   }         void OpenCmdExecuted(object target, ExecutedRoutedEventArgs e)         {             MessageBox.Show("测试弹出对话框,命令已执行!");         }

void OpenCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)         {             e.CanExecute = true;         }
        void HelpCanExecute(object sender, CanExecuteRoutedEventArgs e)         {             e.CanExecute = true;         }

void HelpExecuted(object sender, ExecutedRoutedEventArgs e)         {             System.Diagnostics.Process.Start("http://www.BrawDraw.com/");         }  } }

你不妨试试在程序执行之后,按下F1或F2试试效果,是不是按F2时浏览器指向"http://www.BrawDraw.com/",而按F1时没有任何效果?这是因为这两句:   <KeyBinding Command="Help" Key="F2" />   <KeyBinding Command="NotACommand" Key="F1" /> 当按F2时,Help命令执行;当按F1时,由于Command="NotACommand",即窗口忽略此命令的执行。

转载于:http://blog.csdn.net/johnsuna/article/details/1770602

ApplicationCommands用于表示应用程序程序员经常遇到的常见命令,类似于ctrl+c的更多相关文章

  1. ApplicationCommands 应用程序常见命令

    ApplicationCommands用于表示应用程序程序员经常遇到的常见命令,类似于ctrl+c 在WPF中,许多控件都自动集成了固有的命令集.比如文本框TextBox就提供了复制(Copy),粘贴 ...

  2. 后端程序员必备的 Linux 基础知识+常见命令(近万字总结)

    大家好!我是 Guide 哥,Java 后端开发.一个会一点前端,喜欢烹饪的自由少年. 今天这篇文章中简单介绍一下一个 Java 程序员必知的 Linux 的一些概念以及常见命令. 如果文章有任何需要 ...

  3. Swing用于开发Java应用程序用户界面

    Swing是一个用于开发Java应用程序用户界面的开发工具包. 以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格. Swing开发人员只用很少的代码就可以利用Swing丰富 ...

  4. 七、dbms_rowid(用于在PL/SQL程序和SQL语句中取得行标识符)

    1.概述 作用:用于在PL/SQL程序和SQL语句中取得行标识符(rowid)的信息并建立ROWID,通过该包可以取得行所在的文件号,行所在文件的数据块号,行所在数据块的行号,以及数据库对象号等消息. ...

  5. 一步步做程序优化-讲一个用于OpenACC优化的程序(转载)

    一步步做程序优化[1]讲一个用于OpenACC优化的程序 分析下A,B,C为三个矩阵,A为m*n维,B为n*k维,C为m*k维,用A和B来计算C,计算方法是:C = alpha*A*B + beta* ...

  6. 程序员必知的LinuxShell命令

    程序员必知的LinuxShell命令 grep (Globle Regular Expression Print全局正则表达式) 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的 ...

  7. [译]基于Vue.js的10个最佳UI框架,用于构建移动应用程序

    原文查看10 Best Vue.js based UI Frameworks for Building Mobile Apps 如果您期待使用Vue.js构建移动应用程序,那么您可以选择许多可用的UI ...

  8. ChangeWindowMessageFilterEx 概述(用于取消低权限程序向高权限程序发送消息不成功的限制,分6个等级)

    ChangeWindowMessageFilterEx 函数,为指定窗口修改用户界面特权隔离 (UIPI) 消息过滤器. 函数原型: BOOL WINAPI ChangeWindowMessageFi ...

  9. top命令经常用来监控linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令。 按 q 退出

    top命令经常用来监控linux的系统状况,比如cpu.内存的使用,程序员基本都知道这个命令. 按 q 退出

随机推荐

  1. [Javascript] Understand Function Composition By Building Compose and ComposeAll Utility Functions

    Function composition allows us to build up powerful functions from smaller, more focused functions. ...

  2. Android中蓝牙的基本使用----BluetoothAdapter类简介

    天气逐渐热了,自己也越来越懒了,虽然看着了很多东西,解决了很多问题,有些收获却不想写着.主要有一下两方面原因: 第一.以前写的一些关于Android知识的Blog,都是在学习过程中发现网络上没有相关知 ...

  3. .net core 下使用StackExchange的Redis库访问超时解决

    原文:.net core 下使用StackExchange的Redis库访问超时解决 目录 问题:并发稍微多的情况下Redis偶尔返回超时 给出了参考网址? 结论 小备注 引用链接 问题:并发稍微多的 ...

  4. 【SSH2(理论+实践)】--图说Struts2的执行

        前几篇文章讨论了有关Struts2的核心机制及一些基础,但同一时候也遗留下了非常多问题.这些问题主要是针对Struts2的一些使用技巧的,该篇文章将会针对Struts2的使用技巧进行讨论, ...

  5. java--css+js做的树形菜单(完整版)

    jsp页面: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8 ...

  6. sql server中查询结果集顺序问题

    因为优化器可能会选择并行处理,或者在多文件情况下不按“期待”顺序扫描数据,所以无法保证数据的顺序.唯一能确保顺序的只有order by. 并行处理的过程导致顺序不一致,单核上不存在并行,而双核,可能使 ...

  7. 关于在方法里面使用泛型public static <T> T

    对泛型的理解一直处于模糊的状态,所以今天就专门看了看泛型,看到了如下的一段代码,网上没有找到相应的解释. 然后尝试着自己理解了一下,第一次写博客,手比较生. 现在就开始来写我的理解. 看到这个方法的第 ...

  8. 【26.09%】【codeforces 579C】A Problem about Polyline

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  9. 下面介绍一个 yii2.0 的 Rbac 权限设置,闲话少说,直接上代码,

    1.首先我们要在组件里面配置一下 Rbac ,如下所示(common/config/main-local.php或者main.php).  'authManager' => [  'class' ...

  10. node assert模块 Study.1

    1.assert() 大体理解意思:assert可以抽象理解为node中的alert++ assert模块是Node的内置模块,用于断言的作用,如果不是自己想要的就抛出错误 assert(arg1, ...