wpf的command命令,wpf按钮绑定命令

  wpf的command命令,wpf按钮绑定命令

  作为春节前的最后一篇技术文章,该写什么?思考片刻后,让我们来谈谈WPF的命令。

  指挥是一件有趣的事情。简单来说就是一种逻辑,但是这种逻辑可以被多个源调用,可以作用于多个目标。比如我们常见的“复制”、“剪切”等命令,它们本身就是逻辑3354操作剪贴板的一种逻辑行为。但是你会发现它们不仅可以用在菜单项中,也可以用在工具栏按钮上,还可以用快捷键Ctrl C等调用。

  菜单项

  工具栏按钮

  从上面的例子可以发现,命令可以用功能相同的代码逻辑来泛化,就像我们封装一个类,可以在N个地方调用,这样就不用每次都写一样的代码了。

  的。NET类库给我们准备了很多通用命令,很好用,这里就不说了。你可以参考MSDN的相关说明。本文的主题是自定义命令。在讲述自定义命令之前,首先要了解与命令相关的几个要素,就像我们常说的“叙事六要素”。一个完整的命令应该包括:

  1.命令,这当然是最核心的部分;

  2.命令来源:谁发出的命令;

  3.目标,命令作用于哪些元素,比如将内容粘贴到textbox中,那么TextBox就是命令目标;

  严格来说,命令是实现ICommand接口的类。但是,在国际使用中,我们不必这样做。一个有效的方法是在类中直接声明RouteCommand类的成员字段。一般情况下,使用Static关键字,这样命令只能与类相关,而不管它属于哪个实例。

  接下来,我们一起来完成一个例子:

  1.创建新的WPF应用程序。如何创建?(略);

  2.布局主窗体。我们的重点是需要两个文本框和一个按钮,其他的我们喜欢;

  3.使用CommadBinding将命令添加到form类的CommandBindings集合中。

  4.设置按钮的命令属性。

  在上面的XAML中,我们应该注意引入定义路由命令的类的名称空间。

  接下来,我们将编写两个事件处理程序,——CanExecute,以确定命令是否可用;执行的命令逻辑应该写在这里。

  所以我们会有一个疑问,事件的始作俑者是谁?目标是谁?

  我们在已执行事件处理程序的开始处创建下一个断点,然后一步一步地跟随它。

  结果如下:

  发送方是主要形式。

  ExecutedRoutedEventArgs的Source属性是命令目标。

  然而,当我们运行它时,我们发现字体变成蓝色的不是文本框,而是按钮。为什么?

  让我们仔细阅读MSDN文件和相关说明。因为我们没有设置目标,所以默认情况下,当前聚焦的元素将成为命令目标。

  让我们更改上面的XAML,使按钮的CommandTarget指向第二个文本框。

  现在运行它,您可以看到在单击按钮后,第二个文本框的前景色变成了蓝色。

  CanExecute事件和Executed事件都是路由事件。当然,RouteCommand类也包含隧道事件。什么是路由事件,什么是隧道事件超出了本文的范围。

  以路由事件为例,下面我们来做第二个例子。在这个例子中,表单上有一个StackPanel,其中包含一个按钮。同时,CommandBinding被添加到StackPanel中,并且一个DockPanel嵌套在StackPanel中。类似地,相同的命令被添加到包含画布的DockPanel中。但是Canvas不添加CommandBinding,然后输出所引发事件的类型的Name属性的值,命令目标类型和执行的事件处理程序中的目标。

  [XAML]

  然后,我们运行程序,依次点击这三个按钮,然后打开“输出”窗口进行观察。

  结果如下:

  你发现了什么?从调试信息可以看出,后两个命令引起的事件类型都是DockPanel,这也符合路由事件冒泡可视化树的原理。

  因为我们在Canvas中没有绑定命令,所以我们不能在Canvas上引发事件,所以我们向上路由到DockPanel,所以最后两个事件的触发器是DockPanel。

  接下来,我们将做第三个例子,它是由快捷键Ctrl Alt Y而不是控件激活的。

  运行程序,当窗口处于活动状态时,再按Ctrl+Alt+Y,就可以看到效果了。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: