2012-08-01 50 views

回答

0

隧道和冒泡事件允许处理程序在多个元素之间共享,并被层次结构中较高级的控件拦截。例如,假设下面的XAML代码:

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

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

相反,隧道事件允许您在触发控件之前拦截它。因此,举例来说,如果我在我的整个Window禁用为每个按钮的命令,我可以用一个隧道事件做到这一点,按钮总是发现CanExecute回报false