• 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

  • 相关阅读:
    Linux命令之_Cut(转)
    Use “error_messages” in Rails 3.2? (raises “undefined method” error)
    ruby错误
    Linux SvN操作
    Linux 安装SVN服务器 (转)
    删除 vim 命令
    vscode 配置java开发
    java json
    svn
    采样率和比特率
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/7714853.html
Copyright © 2020-2023  润新知