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

  • 相关阅读:
    PowerDesigner学习 ---- 系列文章
    PowerDesigner基础使用 ---- 入门学习
    PowerDesigner ---- 数据库设计(概念模型CDM和物理模型PDM)
    PowerDesigner V16.5 安装及汉化
    在树莓派是安装并配置NTP服务
    RESTful Web API 理解
    Linux或树莓派3——挂载U盘、移动硬盘并设置rwx权限
    开启树莓派自带的VNC功能
    c#代码获取web.config配置文件里面设置的 <compilation debug="true"节点
    WebService的web客户端同步、异步、多线程向服务端传入参数的数据交互方式
  • 原文地址:https://www.cnblogs.com/andrew-blog/p/WPF_Command.html
Copyright © 2011-2022 走看看