电脑技术学习

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

dn001

操作中的路由命令

为了使这一概念更为具体并让路由命令的益处立竿见影,我们来看一个简单的示例。在图 3 中,您可看到一个简单的 UI,它有两个输入文本框,一个对文本框中的文本执行 Cut 操作的工具栏按钮。


图3包含Cut命令工具栏按钮的简单示例

要 使用事件完成挂接,需要为工具栏按钮定义 Click 处理程序,且该代码需要引用两个文本框。您需要根据控件中的文本选择确定哪个文本框是焦点项并调用相应的剪贴板操作。还要根据焦点项的位置和文本框中是否 有选项,在适当的时候启用或禁用工具栏按钮。代码十分凌乱且复杂。

对于这一简单示例,问题还不大,但如果这些文本框深入用户控件或自定义控件的内部,且窗口代码隐藏无法直接访问它们,情况又会如何?您不得不在用户控件的边界显示 API 以便能从容器实现挂接,或公开显露文本框,两者皆不是理想的方法。

如使用命令,只需将工具栏按钮的 Command 属性设为在 WPF 中定义的 Cut 命令即可。

<ToolBar DockPanel.Dock="Top" Height="25"> <Button Command="ApplicationCommands.Cut"> <Image Source="cut.png"/>

</Button>

</ToolBar>

现在您运行应用程序,会看到工具栏按钮一开始是被禁用的。在其中一个文本框中选择了文本后,工具栏按钮会启用,如果单击该按钮,文本会被剪切到剪贴板。这一操作适用于 UI 中任何位置的任何文本框。喔,很不错吧?

实际上,TextBox 类实现有一个针对 Cut 命令的内置命令绑定,并为您封装了该命令(Copy 和 Paste)的剪贴板处理。那么,命令如何只调用所关注的文本框,消息如何到达文本框并告诉它处理命令?这便是路由命令中路由部件发挥作用的地方。