我正在学习WPF / Silverlight并在MS视频播放中看到现在建议使用RoutedEventArgs
而不是EventArgs
;虽然它没有确切说明原因。
我有一个win表单应用程序,它使用“小部件”的接口,试图不依赖于特定的显示技术(在Presenters / ViewModels中),所以如果我的IButton Click事件现在需要采用{{1}现在我猜它没那么有用。
有人可以解释我是否应该在所有情况下切换到RoutedEventArgs
以及为什么?
顺便说一句,其他人是否有关于使用界面小部件的经验/意见,我正在描述它们?
答案 0 :(得分:33)
嗯,基本上RoutedEvent
遍历Logical
树,从源元素到根元素(Bubble
事件路由),或者从根元素到子级元素的频率较低(Tunnel
事件路线)。这意味着,如果Button
内有StackPanel
,则其本身位于Grid
内;如果你在控件中定义了一个Click
事件,他们都将触发它,除非其中一个处理它。
如果事件路线为Bubble
(命名为常规事件Click
),则会显示:
Button -> StackPanel -> Grid
如果事件路线是Tunnel
(名为PreviewClick
),那么它将会反过来:
Grid -> StackPanel -> Button
现在使用处理,它非常简单。如果它是Bubble
路由并且Button
将RoutedEventArgs.Handled
设置为true,那么StackPanel
和Grid
将不会触发它。与RoutedEvent
相同,如果Grid
处理它,StackPanel
和Button
将不会触发它。
简而言之,这是我的理解,为了简单起见,我避免了一些事情。
我建议this chapter以便更好地理解此WPF功能。
答案 1 :(得分:3)
RoutedEventArgs是一种新类型的事件参数,用于支持事件的WPF模型:路由事件。很难在简短的条目中解释为什么WPF选择这个模型或者重点是什么,所以我首先会指出你关于这个主题的好文章。
答案 2 :(得分:0)
假设我们有一个包含其他元素的Button元素,StackPanel本身包含TextBox和Image元素。
Button元素应该能够处理点击事件,无论是点击的图像还是TextBox都是。
因此WPF提供了一种方法: