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元素都可以简单的修改其样式,从而达到程序的风格统一.可是当 ...
随机推荐
- windows xp 创建 Oracle(11G)数据库实例时写入系统日志失败解决方案
1.查看Windows日志相关服务(Even Log),无异常: 2.清空事件管理器中“应用程序”和“系统节点”的内容,对这两个节点,分别在“属性”页面用增大“最大日志文件大小”的值,并选中“按需要改 ...
- UTF8字符串在lua的截取和字数统计【转载】
转载自:GitHub:pangliang/pangliang.github.com 需求 按字面个数来截取 函数(字符串, 开始位置, 截取长度) utf8sub(,) = 好1世界哈 utf8sub ...
- How do I create a List in Scala?
Scala List class FAQ: How do I create a List in Scala? You can create a Scala List in several differ ...
- 使用vuex保存singer每个歌星的基本信息
1.建src/store文件夹,建立以下文件来存储歌星信息 2.state.js const state = { singer:{} } export default state 2.mutation ...
- LeetCode: Wildcard Matching 解题报告
Wildcard MatchingImplement wildcard pattern matching with support for '?' and '*'. '?' Matches any s ...
- [转]SQL Server 「逾时过期」的处理方式
基本上 SQL Server 只要在处理大量数据的指令,如 INSERT INTO A SELECT * FROM B 在数据量很大的时候,很容易发生 Timeout ,也就是常见的「逾期过时」错误. ...
- 分享一款基于jquery的圆形动画按钮
之前为大家介绍过一款纯css3实现的圆形旋转分享按钮.今天要给大家带来一款基于jquery的圆形动画按钮.这款按钮鼠标经过的时候以边框转圈,然后逐渐消息,在实例中给出了四种颜色的demo.效果图如下: ...
- 一款由html5 canvas实现五彩小圆圈背景特效
之前介绍了好几款html5 canvas实现的特效.今天要为大家介绍一款由html5 canvas实现五彩小圆圈背景特效.五彩的小圆圈渐显渐失的特效.效果图如下: 在线预览 源码下载 html代码 ...
- linux中的ll(转)
linux中的ll(转) 操作系统:ubuntu 9.04 ll并不是linux下一个基本的命令,它实际上是ls -l的一个别名. Ubuntu默认不支持命令ll,必须用 ls -l,这样使用起来不是 ...
- ruby send respond_to
http://ruby-metaprogramming.rubylearning.com/html/ruby_metaprogramming_2.html http://galeki.is-progr ...