路由事件&;滚动视图
本文关键字:滚动 视图 事件 路由 | 更新日期: 2023-09-27 18:01:55
我的元素树是这样组成的(不相关的信息被删除)
<TabItem Style="Click_PutNormalCursorBack">
<ScrollViewer>
<ItemsControl Style="ContainsMuchLabels_n_CollapsibleGroupeHeaders">
<Label Style="Click_ChangeCursor" />
</ItemsControl>
<ScrollViewer>
</TabItem>
我正在模拟拖放。当你点击可点击标签时,它会转换你的光标给你拖拉它的感觉。我想要的是,点击TabItem,它会放回你的正常光标。
我不能使用PreviewMouseDown事件,因为它永远不会允许标签被点击。
我发现的一个解决方案是在我的ScrollViewer和我的ItemsControl之间的元素树中添加一个大面板,带有透明的背景来接收点击,在我的ItemsControl的CollapsibleGroupHeader 和 ItemsPanel上放置一个事件处理程序,但这并不是一个真正优雅的解决方案。
我在WPF中引入了RoutedEvents来解决这类问题…
注意:我的处理程序不是我的样式,样式只是用来提供更多信息的
有比我的更好的解决方案吗?
同时使用MouseDown事件。如果事件不适用,不要将事件标记为已处理(e.Handled = true)。例如,在可点击选项卡中,如果光标不在拖动状态时被点击,就不要标记已处理。一旦光标处于拖动状态,如果用户再次单击可单击标签,则不要标记已处理(除非您希望该事件重置光标)。您还可以在选项卡上使用PreviewMouseDown事件,但同样不要标记已处理,除非单击来自来自标签的光标。
如果您不标记事件已处理,它将继续传播,以便多个控件可以处理它。即使事件被标记为已处理,而您仍然想要处理它,您也可以在事件被标记为已处理时触发事件:参见本文