zoukankan      html  css  js  c++  java
  • WPF 自定义命令 以及 命令的启用与禁用

    自定义命令:

        在WPF中有5个命令类(ApplicationCommands、NavigationCommands、EditingCommands、ComponentCommands 以及 MediaCommands)中存储命令,显然不会为应用程序提供所有可能需要的命令,幸运的是,定义自己的命令非常容易。需要的全部工作仅仅是实例化一个新的 RoutedUICommand 对象 即可。

        RoutedUICommand 类提供了几个构造函数。虽然可以创建没有任何附加信息的RoutedUICommand对象,但几乎总是希望提供命令名称、命令文本以及属性类型。此外,可能希望为 InputGestures 集合提供快捷键。

        最好的设计方式是遵循 WPF 库的范例,并通过静态属性提供自定义的命令。下面的示例定义了一个名为 Requery 的命令:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Input;
    
    namespace _1027_CustomCommand
    {
        public class DataCommands
        {
            private static RoutedUICommand requery;
    
            static DataCommands()
            {
                //初始化命令
                InputGestureCollection inputs = new InputGestureCollection();
                inputs.Add(new KeyGesture(Key.R, ModifierKeys.Control, "Ctrl+R"));
                requery = new RoutedUICommand("重新查询", "Requery", typeof(DataCommands), inputs);
            }
    
            public static RoutedUICommand Requery
            {
                get { return requery; }
            }
        }
    }

        这里你可以定义命令的快捷键、命令文本、名称、命令类型。

        一旦定义了命令,就可以在命令绑定中使用它,就像使用 WPF 所提供的所有预先构建好的命令那样。至此,我们自定义的命令就完成了。下节继续讲一下关于禁用与启用命令。

    WPF命令的启用与禁用:

        在命令中都包含有 Executed 事件与 CanExecute 事件,我们需要在 CanExecute 中去处理命令是否启用与禁用。如下代码所示:

            private void CommandBinding_CanExecute_1(object sender, CanExecuteRoutedEventArgs e)
            {
                e.CanExecute = //true or false;
            }

        我们只需要简单声明一个全局变量 例如:private bool _stopCommand  给 e.CanExecute 赋值即可随时控制。 如果 _stopCommand  值为false,就会禁用命令。如果 _stopCommand  值为true,就会启用命令(如果没有设置 CanExecute 标识,就会保持最近的值 不做任何改变)。

        当使用 CanExecute 事件时,我们还需要理解一个问题。由 WPF 负责调用 RoutedCommand.CanExecute() 方法触发事件处理程序,并且确定命令的状态。当 WPF 命令管理器探测到一个确信是重要的变化时——例如,当焦点从一个控件移到另外一个控件上时,或者执行了一个命令之后,WPF 命令管理器就会完成该工作。控件还能引发 CanExecuteChanged 事件以通知 WPF 重新评估命令——例如,当用户在文本框中按下一个键时就会发生该事件。总之,CanExecute 事件会被频繁地触发,并且不应当在该事件中处理耗时的代码。

    下面是本文示例的截图与源码:

    源码下载:http://files.cnblogs.com/andrew-blog/1027_CustomCommand.rar

    开发工具:VS2012

    参考:http://www.wxzzz.com/?id=137

  • 相关阅读:
    sqlserver 中数据类型bit的使用 Followyour
    如何在保证睡眠的情况把各种事情做好
    求职具备八大素质
    提高效率的5条黄金法则
    随笔摘录:世上只有一件东西,能始终经受住生活的冲击:一颗宁静的心。
    Hadoop中文文档 (0.19.0)
    两个微型的Map/Reduce框架: FileMap(FM)和BashReduce
    Hadoop的商业化支持
    Yahoo的Hadoop版本
    Map/Reduce and Queues for MySQL Using Gearman
  • 原文地址:https://www.cnblogs.com/andrew-blog/p/WPF_Command.html
Copyright © 2011-2022 走看看