博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF 自定义快捷键命令(Command)
阅读量:5837 次
发布时间:2019-06-18

本文共 3236 字,大约阅读时间需要 10 分钟。

命令简介

     WPF 中的命令是通过实现  接口创建的。ICommand 公开两个方法( 及 )和一个事件()。Execute 执行与命令关联的操作。CanExecute 确定是否可以在当前命令目标上执行命令。如果集中管理命令操作的命令管理器检测到命令源中发生了更改,此更改可能使得已引发但尚未由命令绑定执行的命令无效,则将引发 CanExecuteChanged。ICommand 的 WPF 实现是  类。

     WPF 中的主要输入源是鼠标、键盘、墨迹和路由命令。更加面向设备的输入使用 RoutedEvent 来通知应用程序页中的对象已发生了输入事件。RoutedCommand 没有不同。RoutedCommand 的 Execute 和 CanExecute 方法不包含命令的应用程序逻辑,而是引发这样的路由事件:沿元素树以隧道和冒泡形式传递,直到遇到具有  的对象。CommandBinding 包含这些事件的处理程序,执行此命令的就是这些处理程序。

     RoutedCommand 上的 Execute 方法在命令目标上引发  和 Executed 事件。RoutedCommand 上的 CanExecute 方法在命令目标上引发 CanExecute 和  事件。这些事件沿元素树以隧道和冒泡形式传递,直到遇到具有该特定命令的 CommandBinding 的对象。

     WPF 提供了一组常用的路由命令,这组命令分布在几个类中:、、、 和 。这些类仅包含 RoutedCommand 对象,而不包含命令的实现逻辑。实现逻辑由其上执行命令的对象负责。[1]

自定义命令

     除了上述WPF 自带的RoutedCommand,还可以使用 类创建用户自定义命令,下面将通过一个实例详细讲解。首先新建一个WPF 项目,在其中加入一个TextBlock。目的是通过快捷键组合“Ctrl+Alt+I”和“Ctrl+Alt+D”改变字体大小,由“Ctrl+Alt+C”随机改变字体颜色。

TextBlock

首先在Window.Resources 中定义两个RoutedUICommand,分别用于增加和减小字体尺寸。

     通过KeyBinding 为上面两个命令绑定快捷键,按键组合可使用“+”进行连接。下面代码分别通过+ 和 两种方式为定义快捷键组合方式。大家可以任选其一进行使用,MSDN 中建议使用Gesture 方式定义以免发生混淆。


     接下来就要通过CanExecute和Excuted 为命令绑定相关的事件,CanExecute 负责判断能否执行命令(即Executed 定义的事件),Executed 就负责去执行用户定义的操作命令。

     至此,我们在XAML 中对命令的定义已经完成。下面进入到C# 中编写命令事件相关内容。扩大字体尺寸时通过CommandBinding_Increase_CanExecute 判断当前字体是否小于50,否则不会执行Executed 命令。若字体尺寸在50以内则通过CommandBinding_Increase_Executed 每次增加5。缩小尺寸时则不低于5。

private void CommandBinding_Increase_CanExecute(object sender, CanExecuteRoutedEventArgs e){    if (textBlock1.FontSize > 50)    {        e.CanExecute = false;    }    else    {        e.CanExecute = true;    }}private void CommandBinding_Increase_Executed(object sender, ExecutedRoutedEventArgs e){    textBlock1.FontSize += 5;}private void CommandBinding_Decrease_CanExecute(object sender, CanExecuteRoutedEventArgs e){    if (textBlock1.FontSize <= 5)    {        e.CanExecute = false;    }    else    {        e.CanExecute = true;    }}private void CommandBinding_Decrease_Executed(object sender, ExecutedRoutedEventArgs e){    textBlock1.FontSize -= 5;}

运行程序使用“Ctrl+Alt+I”或 “Ctrl+Alt+D”改变字体大小。

Increase

     除了在XAML 中定义RoutedUICommand 我们也可以直接用C#定义,下面继续完成修改字体颜色的快捷键命令。新建一个CustomCommand 类,在其中加入如下代码定义ChangeFontColor 命令。

using System.Windows.Input;namespace WpfUserControlTest{    class CustomCommand    {        public static readonly RoutedUICommand ChangeFontColor =             new RoutedUICommand("Change Font Color", "ChangeFontColor", typeof(MainWindow));    }}

在MainWindow.xaml <Window> 中加入命名空间,以便后面调用ChangeFontColor 命令。

xmlns:c="clr-namespace:WpfUserControlTest"

在<Window.InputBindings>中为ChangeFontColor 添加快捷键组合。

在<Window.CommandBindings>中添加CanExecute、Excuted 命令事件。

当用户点击“Ctrl+Alt+C”是触发命令事件,最近改变字体颜色。

private void CommandBinding_Color_CanExecute(object sender, CanExecuteRoutedEventArgs e){    e.CanExecute = true;}private void CommandBinding_Color_Executed(object sender, ExecutedRoutedEventArgs e){    Random rd = new Random();        textBlock1.Foreground = new SolidColorBrush(        Color.FromRgb(            (byte)rd.Next(0,255),            (byte)rd.Next(0, 255),            (byte)rd.Next(0, 255))            );}
Color
 

源代码下载

[1]引自:

本文转自Gnie博客园博客,原文链接:http://www.cnblogs.com/gnielee/archive/2010/07/16/wpf-custom-hotkey-command.html,如需转载请自行联系原作者

你可能感兴趣的文章
记录一次蚂蚁金服前端电话面试
查看>>
直播源码开发视频直播平台,不得不了解的流程
查看>>
Ubuntu上的pycrypto给出了编译器错误
查看>>
聊聊flink的RestClientConfiguration
查看>>
在CentOS上搭建git仓库服务器以及mac端进行克隆和提交到远程git仓库
查看>>
測試文章
查看>>
Flex很难?一文就足够了
查看>>
【BATJ面试必会】JAVA面试到底需要掌握什么?【上】
查看>>
CollabNet_Subversion小结
查看>>
mysql定时备份自动上传
查看>>
17岁时少年决定把海洋洗干净,现在21岁的他做到了
查看>>
《写给大忙人看的java se 8》笔记
查看>>
倒计时:计算时间差
查看>>
Linux/windows P2V VMWare ESXi
查看>>
Windows XP倒计时到底意味着什么?
查看>>
运维工程师在干什么学些什么?【致菜鸟】
查看>>
Linux中iptables详解
查看>>
java中回调函数以及关于包装类的Demo
查看>>
maven异常:missing artifact jdk.tools:jar:1.6
查看>>
终端安全求生指南(五)-——日志管理
查看>>