【发布时间】:2012-08-01 14:42:00
【问题描述】:
隧道 CommandBinding.previewcanexecute 事件有什么用?
并冒泡 CommandBinding.canexecute 事件??有什么用处
【问题讨论】:
标签: wpf commandbinding routedcommand
隧道 CommandBinding.previewcanexecute 事件有什么用?
并冒泡 CommandBinding.canexecute 事件??有什么用处
【问题讨论】:
标签: wpf commandbinding routedcommand
隧道和冒泡事件允许处理程序在多个元素之间共享,并被层次结构中更高的控件拦截。例如,给定以下 Xaml:
<StackPanel>
<Button Command="MyCommand" />
<Button Command="MyCommand" />
<Button Command="MyCommand" />
<Button Command="MyCommand" />
</StackPanel>
如果我想为MyCommand 定义一个会影响所有按钮的CommandBinding,我可以在StackPanel 上定义它。当每个按钮尝试执行其命令时,事件将向上冒泡到StackPanel——这意味着我们只需要一个处理四个按钮的处理程序。如果我在根Window 级别放置一个处理程序,它将应用于我的应用程序中的每个 按钮。
相反,隧道事件允许您在它到达触发它的控件之前拦截它。因此,例如,如果我想禁用整个Window 中的每个按钮的命令,我可以使用隧道事件来执行此操作,并且按钮总是会发现CanExecute 返回@987654329 @。
【讨论】: