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
WPF 自定义命令 以及 命令的启用与禁用的更多相关文章
- WPF中的命令与命令绑定(一)
原文:WPF中的命令与命令绑定(一) WPF中的命令与命令绑定(一) 周银辉说到用户输入,可能我们更多地会联想到 ...
- WPF中的命令与命令绑定(二)
原文:WPF中的命令与命令绑定(二) WPF中的命令与命令绑定(二) 周银辉在WPF中,命令(Commandi ...
- WPF之事件绑定命令
目录 事件绑定意义 无参数的事件绑定 带EventArgs参数的事件绑定 使用事件绑定 扩展:基于InvokeCommandAction源码的实现(推荐) 参考资料 事件绑定意义 一般事件的处理程序都 ...
- ifconfig命令--查看、配置、启用或禁用网络接口的工具
ifconfig 是一个用来查看.配置.启用或禁用网络接口的工具,这个工具极为常用的.可以用这个工具来临时性的配置网卡的IP地址.掩码.广播地址.网关等.也可以把它写入一个文件中(比如/etc/rc. ...
- WPF中的命令与命令绑定导航
1.WPF中的命令与命令绑定(一) (引入命令) 2.WPF中的命令与命令绑定(二)(详细介绍命令和命令绑定)
- WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍
WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式 ...
- WPF 原生绑定和命令功能使用指南
WPF 原生绑定和命令功能使用指南 魏刘宏 2020 年 2 月 21 日 如今,当谈到 WPF 时,我们言必称 MVVM.框架(如 Prism)等,似乎已经忘了不用这些的话该怎么使用 WPF 了.当 ...
- Django编写自定义manage.py 命令
官网文档地址:编写自定义 django-admin 命令 金句: 你所浪费的今天,正是昨天死的人所期待的明天. 开篇话: python manage.py <command> 的命令我们用 ...
- WPF 自定义 MessageBox (相对完善版)
WPF 自定义 MessageBox (相对完善版) 基于WPF的自定义 MessageBox. 众所周知WPF界面美观.大多数WPF元素都可以简单的修改其样式,从而达到程序的风格统一.可是当 ...
随机推荐
- python ——面向对象进阶(反射,双下线方法,静态方法,类方法)
属性 如果你已经了解Python类中的方法,那么属性就非常简单了,因为Python中的属性其实是普通方法的变种. 哎,其实就是这样,我们看一下当我们想查看税后工资的时候,这其实是一个人的属性,但是它却 ...
- java 多线程4: java线程的优先级
Java线程的优先级取值范围是1 (Thread.MIN_PRIORITY ) 到 10 (Thread.MAX_PRIORITY ).如果没有设置, 线程默认的优先级是NORM_PRIORITY.这 ...
- 搭建一个单纯学习hibernate的项目
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- mysql的onestart和start区别
在FreeBSD上安装了mysql5.7之后,启动mysql时报了如下的错误: root@tuhooo:~ # /usr/local/etc/rc.d/mysql-server start Canno ...
- php7+apache2.4 安装(window)
一.下载 需要下载 php7.apache2.4.vc2015(VC库) PHP7下载地址:http://windows.php.net/download/ Apache 下载地址:https://h ...
- Quartz 与 Spring集成
http://www.cnblogs.com/pigwing/archive/2011/07/12/2104002.html http://blog.arganzheng.me/posts/quart ...
- FreeMarker MyEclipse IDE
1. 下载freemarker-ide : http://sourceforge.net/projects/freemarker-ide/files/ 2. 下载完成后解压,由于IDE中的freema ...
- 在XP系统下如何访问win10共享的打印机
< > 找到 GUEST 用户,添加即可. 2. Win10 共享本地打印机 右击要共享的打印机,共享选项卡,设置共享名,这个共享很重要,要记住,尽量设置简单点.IP + 共享名就是网络打 ...
- Tomcat:基础安装与使用教程
Tomcat:基础安装与使用教程 背景 此文记录了 Tomcat 的基本使用方法,主要为了强化记忆. 安装步骤 第一步:下载和安装 Java 下载地址:http://www.oracle.com/te ...
- 判断asp.net中session过期的方法
判断asp.net中session过期的方法 转载自:http://www.cnblogs.com/xilipu31/archive/2013/04/12/3016830.html 方法一:最麻烦也是 ...