隧道化CommandBinding.previewcanexecute事件有什么用?

时间:2012-08-01 14:42:01

标签: wpf commandbinding routedcommand

对CommandBinding.previewcanexecute事件进行隧道传输有什么用?

并冒泡CommandBinding.canexecute事件??它是如何有用的

1 个答案:

答案 0 :(得分:0)

隧道和冒泡事件允许处理程序在多个元素之间共享,并由层次结构中较高的控件截获。例如,给定以下Xaml:

<StackPanel>
   <Button Command="MyCommand" />
   <Button Command="MyCommand" />
   <Button Command="MyCommand" />
   <Button Command="MyCommand" />
</StackPanel>

如果我想为CommandBinding定义一个会影响所有按钮的MyCommand,我可以在StackPanel上定义它。当每个按钮尝试执行其命令时,事件将向上冒泡到StackPanel - 这意味着我们只需要一个处理器来处理四个按钮。如果我在根Window级别放置了一个处理程序,它将应用于我的应用程序中的每个按钮。

相反,隧道事件允许您在它到达触发它的控件之前拦截它。因此,例如,如果我想在整个Window中为每个按钮禁用命令,我可以通过隧道事件执行此操作,按钮始终会找到{{1} }返回CanExecute