我有一个视觉树,它看起来像这样:
一个包含 ScrollViewer 的 Border,其中包含 TextBlock。
ScrollViewer 占据 Border 的 100% 空间,而 TextBlock 可能会或可能不会占据 ScrollViewer 的 100% 空间,这取决于用户如何配置它。
我想捕获当用户在 Border 中的任何位置点击时发生的 MouseDown 事件。当我为 Border 或 ScrollViewer 注册 MouseDown 事件时,回调函数不会被调用。当我将 MouseDown 事件注册到 TextBlock 上时,回调确实被调用,但当然只在 TextBlock 的可点击区域内而不是整个 Border 区域中。
我想到的一个主意是创建某种顶层元素,覆盖整个控件,将其可见性设置为隐藏,然后从那里获取 MouseDown。
有什么建议吗?如果此问题有什么不清楚的地方,请告诉我,我会进行修正。
按请求显示示例代码
一个包含 ScrollViewer 的 Border,其中包含 TextBlock。
ScrollViewer 占据 Border 的 100% 空间,而 TextBlock 可能会或可能不会占据 ScrollViewer 的 100% 空间,这取决于用户如何配置它。
我想捕获当用户在 Border 中的任何位置点击时发生的 MouseDown 事件。当我为 Border 或 ScrollViewer 注册 MouseDown 事件时,回调函数不会被调用。当我将 MouseDown 事件注册到 TextBlock 上时,回调确实被调用,但当然只在 TextBlock 的可点击区域内而不是整个 Border 区域中。
我想到的一个主意是创建某种顶层元素,覆盖整个控件,将其可见性设置为隐藏,然后从那里获取 MouseDown。
有什么建议吗?如果此问题有什么不清楚的地方,请告诉我,我会进行修正。
按请求显示示例代码
// Need to know when a user clicks on anything inside of the border, but the
// because there are items above it, the mouse event doesn't get invoked.
Border border = new Border();
ScrollViewer viewer = new ScrollViewer();
TextBlock textBlock = new TextBlock();
border.Content = viewer;
viewer.Child = textBlock;