WPF 自定义快捷键命令(Command)

命令简介

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

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

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

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

自定义命令

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

<Grid>

<TextBlock x:Name="textBlock1" Text="Hello World" HorizontalAlignment="Center"

FontSize="10" Margin="42,29,46,41" W
idth="293" />

<Grid>

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

<Window.Resources>

<RoutedUICommand x:Key="IncreaseFontSize" Text="Increase Font Size" />

<RoutedUICommand x:Key="DecreaseFontSize" Text="Decrease Font Size" />

<Window.Resources>

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

<Window.InputBindings>

<KeyBinding Modifiers="Ctrl+Alt" Key="I" Command="{StaticResource IncreaseFontSize}"/>

<KeyBinding Gesture="Ctrl+Alt+D" Command="{StaticResource DecreaseFontSize}"/>

<Window.InputBindings>

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

<Window.CommandBindings>

<CommandBinding Command="{StaticResource IncreaseFontSize}"

CanExecute="CommandBinding_Increase_CanExecute"

Executed="CommandBinding_Increase_Executed"/>

<CommandBinding Command="{StaticResource DecreaseFontSize}"

CanExecute="CommandBinding_Decrease_CanExecute"

Executed="CommandBinding_Decrease_Executed"/>

<Window.CommandBindings>

至此,我们在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”改变字体大小。

除了在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 中加入命名空间,以便后面调用ChangeFontColor 命令。

xmlns:c="clr-namespace:WpfUserControlTest"

在中为ChangeFontColor 添加快捷键组合。

<KeyBinding Modifiers="Control+Alt" Key="C" Command="c:CustomCommand.ChangeFontColor"/>

在中添加CanExecute、Excuted 命令事件。

<CommandBinding Command="c:CustomCommand.ChangeFontColor"

CanExecute="CommandBinding_Color_CanExecute"

Executed="CommandBinding_Color_Executed"/>

当用户点击“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))

);

}
源代码下载

[1]引自:http://msdn.microsoft.com/zh-cn/library/ms752308.aspx

时间: 2024-08-04 04:01:28

WPF 自定义快捷键命令(Command)的相关文章

一起谈.NET技术,WPF 自定义快捷键命令(Command)

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

WPF自定义快捷键命令(Command)

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

10个PS自定义快捷键介绍

1.显示.隐藏和隔离图层 这个快捷键大大节省了工作时间.一旦开始使用这个快捷键,我们就再也不用点击图层面板上的眼睛图标了.设置这个快捷键的好处是它可以用来打开或关闭选中的图层.如果想检查单个图层或一组特定的图层对最终作品的影响,只需选中这些图层,按下设置的显示/隐藏图层命令的快捷键即可. 设置F3来显示/隐藏图层.设置Command/Ctrl+F3隔离选中的图层. 2.转换为智能对象和编辑内容 智能对象或许是Photoshop无损操作中最重要的一个元素,但很奇怪的是,竟然没有为它们设置默认的快捷

Mvvm Light Toolkit for wpf/silverlight系列之Command和Events

转自http://blog.csdn.net/duanzilin/article/details/6399640 事件是WPF/SL应用程序中UI与后台代码进行交互的最主要方式,与传统方式不同,mvvm中主要通过绑定到命令来进行事件的处理,因此要了解mvvm中处理事件的方式,就必须先熟悉命令的工作原理.    一.RelayCommand命令 WPF/SL命令是通过实现 ICommand 接口创建的. ICommand 公开两个方法(Execute 及 CanExecute)和一个事件(CanE

word2010怎么给自定义快捷键

时不时的,您可能会遇到需要在文档中插入小圆点.分割符什么的情况.举个例子:写地址时,希望能在地址间插个小圆点? 上图中的小圆点是怎么输入的呢? 其实很简单,键盘上 Tab 键上面那个键单击一下就行了.不过,小圆点键盘上是有现成的,那大圆点或是其它的一些特殊符号怎么办呢?常规方法是使用菜单添加.仍以插入圆点为例: 在 Word 文档中,鼠标放到需要插入圆点处单击,然后打开"插入"标签,在符号栏中单击"符号"按钮,一些常用符号会在此列出,如果有您需要的,单击选中即可.如

如何给Word2010中的符号设置自定义快捷键

  在Word文档中,鼠标放到需要插入圆点处单击,然后打开"插入"标签,在符号栏中单击"符号"按钮,一些常用符号会在此列出,如果有您需要的,单击选中即可.如果这里没有需要的圆点,请点击菜单底部的"其它符号"链接.     弹出符号对话窗后,在"子集"下拉菜单中选择一个合适的符号种类.这里,我们选择"广义标点"来举例.选中圆点图标后,单击"插入"按钮.(先不要关闭符号对话窗) PS: 对话

wpf-WPF中Page页面上怎么自定义快捷键。急急急!!!

问题描述 WPF中Page页面上怎么自定义快捷键.急急急!!! 是继承自Page的页面,不是Window的页面,继承自Window的页面快捷键有用,但换成Page页就失效了. 解决方案 http://blog.sina.com.cn/s/blog_4c0e8aa20100ung8.html 解决方案二: http://blog.csdn.net/sephoenix/article/details/8555322

cad快捷键大全 cad快捷键命令大全

CAD快捷键 L,         *LINE                    直线       ML,        *MLINE                   多线(创建多条平行线) PL,        *PLINE                   多段线  PE,        *PEDIT                   编辑多段线    SPL,       *SPLINE                  样条曲线   SPE,       *SPLINEDIT

WPF : 自定义Windows Presentation Foundation的控件

虽然 Windows Presentation Foundation 中的控件模型非常多,但仍不可能提供需要的每一种控件.这时候,控件编写就派上用场了.在本文中,我将向您讲述如何使用 Windows Presentation Foundation 自定义现有控件,以及如何为您的项目创建全新的控件(或元素). 在开发一个自定义控件之前,应该先问问自己是否真的需要它.在 Windows Presentation Foundation 中,组合.样式和模板化功能使您可以自定义现有控件,这是以前的技术所