对CommandBinding.previewcanexecute事件进行隧道传输有什么用?
并冒泡CommandBinding.canexecute事件??它是如何有用的
答案 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
。