• ApplicationCommands 应用程序常见命令


    ApplicationCommands用于表示应用程序程序员经常遇到的常见命令,类似于ctrl+c

    在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="Help" Key="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

    原文:http://www.cnblogs.com/chuhaida/p/4166438.html

  • 相关阅读:
    PAT Basic 1077 互评成绩计算 (20 分)
    PAT Basic 1055 集体照 (25 分)
    PAT Basic 1059 C语言竞赛 (20 分)
    PAT Basic 1072 开学寄语 (20 分)
    PAT Basic 1049 数列的片段和 (20 分)
    蓝桥杯BASIC-13 数列排序
    蓝桥杯入门——3.序列求和
    蓝桥杯入门——2.圆的面积
    蓝桥杯入门——1.Fibonacci数列
    树的总结(遍历,BST,AVL原型,堆,练习题)
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/7714853.html
Copyright © 2020-2023  润新知