电脑技术学习

了解WPF中的路由事件和命令

dn001
;; 路由命令概述

您已看到了路由事件,接下来我来介绍路由命令。WPF 的路由命令为您提供了一种特定的机制,用于将工具栏按钮和菜单项这类 UI 控件挂接到处理程序,并且无需在应用程序中加入许多关联性很强的重复代码。与正常事件处理相比,路由命令有三大优点:路由命令源元素(调用程序)能够与命令目标(处理程序)分离——它们不需要彼此引用,如果是通过事件处理程序链接,就需要相互引用。

处理程序指出命令被禁用时,路由命令将自动启用或禁用所有相关的 UI 控件。

您可以使用路由命令将键盘快捷方式与其他形式的输入手势(例如,手写)相关联,作为调用命令的另一种方式。

此外,路由命令特有的 RoutedUICommand 类可以定义单一 Text 属性,用做任何控件(命令调用程序)的命令提示。与访问每个相关的调用程序控件相比,Text 属性的本地化更为容易。

要在调用程序上声明命令,仅需在触发命令的控件上设置 Command 属性即可。

<Button Command="ApplicationCommands.Save">Save</Button> MenuItem、Button、RadioButton、CheckBox、Hyperlink 和许多其他控件都支持 Command 属性。

对于您想用做命令处理程序的元素,可设置 CommandBinding:

<UserControl ...> <UserControl.CommandBindings> <CommandBinding Command="ApplicationCommands.Save"

CanExecute="OnCanExecute" Executed="OnExecute"/>

</UserControl.CommandBindings> ...

</UserControl>

CommandBinding 的 CanExecute 和 Executed 属性指向声明类代码隐藏中的方法,这些方法会在命令处理进程中被调用。此处的要点是命令调用程序既不需要了解,也不需要引用命令处理程序,处理程序不必知道是哪个元素将要调用命令。

调用 CanExecute 来确定是否应启用命令。要启用命令,应将事件参数的 CanExecute 属性设置为 True,如下所示:

private void OnCanExecute(object sender,

CanExecuteRoutedEventArgs e) {

e.CanExecute = true;

}

如 果命令处理程序带有定义的 Executed 方法,但没有 CanExecute 方法,命令也会被启用(在这种情况下,CanExecute 隐式为 true)。通过 Executed 方法,根据调用的命令执行相应的操作。这类与命令相关的操作可以是保存文档、提交订单、发送电子邮件等。