在WPF应用程序中禁用鼠标右键点击(按住不放)。

12

我正在开发一款运行在Windows XP标准版上的触摸屏应用。目前硬件需要用户长按几秒钟来调出右键菜单,但这可能会干扰其他动作,例如在滚动查看器中按住重复按钮,因此我决定禁用右键菜单。

我理想情况下希望在应用程序级别禁用右键菜单,但如果不可能,也可以在Windows级别禁用右键菜单。

2个回答

25

对我而言,OnPreviewMouseRightButtonDown/Up方法没有起作用。

  1. UIElement有一个属性Stylus.IsPressAndHoldEnabled。将其设置为false可以取消按住右键的行为。我在Windows 7上测试了.NET 4.0,但该属性从.NET 3.0开始就可用。

    <RepeatButton Stylus.IsPressAndHoldEnabled="false" ... />

  2. 还有一篇博客文章在这里,提供了一个类似的禁用按住右键的代码示例。但是,使用此方法,PreviewTouchDown和TouchDown事件不会在手指触摸屏幕时立即触发(这可能对于RepeatButton是必要的),只有稍后才会触发。请阅读此msdn页面上的“备注”。


1
我确认Stylus.IsPressAndHoldEnabled解决方案在Windows 8中也适用 :-) 谢谢! - Michaël Polla
2
我知道这是比较老的问题,但我也确认Stylus.IsPressAndHoldEnabled解决方案适用于Windows 10。 - WBuck
谢谢。我需要使用这个来删除“按住效果矩形”。作为一个新手在使用WPF触摸屏时,这很难找到答案。 - David Graham

10
您可以在窗口上覆盖 OnPreviewMouseRightButtonDown 并将 Handled 设置为 true。您还需要处理 OnPreviewMouseRightButtonUp(感谢 Vitalij 指出这一点)。
那应该就可以了。

您的意思是将OnPreviewMouseRightButtonDown添加到UI元素中吗? - Vitalij
如果你在窗口上处理OnPreviewMouseRightButtonDown事件,那么你将会比其他人更早地处理它...你不需要为每个控件都处理它。 - Stefan Z Camilleri
1
没错!忘记了窗口派生自UIElement,因此具有所有鼠标事件。唯一的问题是你必须将OnPreviewMouseRightButtonDown和OnPreviewMouseRightButtonUp都标记为已处理。 - Vitalij

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接