Nee*_*ndu 23 wpf events event-handling
冒泡事件和隧道事件之间的确切区别是什么?我应该在哪里使用Bubbling Events以及我应该在哪里使用隧道事件?提前致谢!
Joe*_*jah 48
WPF为我们提供了许多处理事件的不同机制 - 它们是冒泡,隧道和直接.这些都称为路由事件.
直接活动
您可能已经习惯了直接路由事件.这是项目本身处理发生的事件的位置.一个很好的例子就是
onClick在标准的WinForms中处理鼠标按钮.这是在GUI项中引发事件并由所述GUI元素处理的地方.冒泡事件
现在我们都喜欢某种形式的气泡.当事件没有被元素处理时(例如a
textbox)并且事件"冒泡"到持有它的UI容器上,就会发生冒泡.例如,假设您有一个包含面板的窗口,在该面板内部有一个网格,在网格内部有一个文本框.如果事件没有被文本框处理,那么它会移动,传递或"冒泡"到网格级别(因为网格包含文本框),如果它没有在那个级别处理,那么事件会进一步冒泡"树"(称为视觉树)到面板,它可能会或可能不会被处理.此过程一直持续到处理或事件"逃离"最顶层元素为止.冒泡事件的例子类似于
MouseButtonDown事件.或者是一个Keydown事件.隧道
隧道与Bubbling相反.因此,事件不是沿着视觉树"向上"移动,而是沿着可视树向着被视为源的元素传播.隧道事件的标准WPF命名定义是它们都以"预览"开头,例如
previewdownkey和previewmousebuttondown.您可以在前往"target"元素的途中捕获它们并进行处理.这方面的一个例子可能是您在网格控件中有一些控件,并且由于某种原因,您已经确定该网格中的任何控件都不允许字母"t"到达它.
来源于作者的意见,我不支持也不同意.
首先:WPF中某些默认事件的命名约定是Preview<event>用于隧道传输和<event>冒泡。因此,例如,对于KeyDown,我们分别有PreviewKeyDown和KeyDown,隧道化和冒泡。
顾名思义,这两者之间的区别在于,隧道事件将从树的最高节点(可能是窗口)开始,一直到最低的子节点。冒泡事件将从孩子开始,然后再次上升。
该指南应对其进行清晰的解释:http : //www.codeproject.com/Articles/464926/To-bubble-or-tunnel-basic-WPF-events
| 归档时间: |
|
| 查看次数: |
15590 次 |
| 最近记录: |