c# - WPF 鼠标按下事件

标签 c# wpf mouseevent

我有一个看起来像这样的可视化树:

一个Border,包含一个ScrollViewer,其中包含一个TexBlock

ScrollViewer 占据了 Border 100% 的空间,而 TextBlock 可能会也可能不会占据 100% 的空间ScrollViewer 的空间取决于用户如何配置它。

我想在用户单击 Border 中的任意位置时捕获 MouseDown 事件。当我为 BorderScrollViewer 注册一个 MouseDown 事件时,不会调用回调。当我向 TextBlock 注册一个 MouseDown 事件时,回调确实被调用,但当然只在 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;

最佳答案

您可以在 Border 上注册 PreviewMouseDown 事件。如果单击包含元素,它也会触发。

private void Border_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
  var clickedElement = e.OriginalSource;
}

关于c# - WPF 鼠标按下事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33526486/

相关文章:

javascript - 覆盖 Edge 上的触摸板滚动

java - 如何在 Swing 中实现同时在 Windows 和 Linux 下运行的弹出菜单

WPF:将控件高度设置为填充网格行高

c# - ReactiveUI命令退订

c# - 导航 QueryString 与 PhoneApplicationService.Current.State

c# - 我如何使用条件运算符编写多条语句

WPF 浏览器应用程序与 WPF 桌面应用程序

jquery - 原型(prototype) .Mousemove 等效项

c# - 将 C++ 结构转换为 C# 以用于 UDP 通信

c# - 以线性/均匀方式在列表 2 中分配列表 1 的不等长值