拖放后触摸事件无法工作

9
我正在开发一款支持基本触摸事件的WPF应用程序(不是操作)。我使用Gong DragDrop来处理拖放操作。我遇到的问题描述如下:
在[预览]拖放事件(使用Gong DragDrop)中,我显示一个对话框并提示用户确认拖放位置,用户必须点击“Yes”按钮才能完成拖放或点击“No”按钮取消拖放。我可以使用鼠标点击这两个按钮,但无法使用触摸事件。
我使用Spy++监视了从窗口派生的提示对话框的鼠标事件,鼠标事件和触摸事件都被记录了。
为什么鼠标事件可以工作而触摸事件不行?有没有办法使触摸事件起作用?

触摸功能无法正常工作或者拖放后触摸功能无法正常工作? - Sankarann
从拖放创建的对话框中,触摸功能无法正常工作。一旦使用鼠标关闭对话框,触摸功能就能正常使用。谢谢。 - Ming
抱歉,我应该再详细说明一下。我正在使用兼容MVVM模式的Gong DragDrop v.0.1.3.11。至于MVVM模式,我正在使用MVVMLight。在拖放事件期间,gong dragdrop库通过接口和其他东西调用了一个来自viewmodel的方法。Gong dragdrop调用的方法包含代码,将使用Messenger发送消息到GUI控制器以生成对话框,提示用户确认拖放位置。不知何故,该对话框上的按钮无法响应触摸,但这些按钮可以使用鼠标单击。再次感谢。 - Ming
所以顺序是这样的:在 Gong dragdrop 中的 Drop 事件调用 ViewModel 中的一个方法 ---> ViewModel 发送消息到 GUI 控制器 ---> Gui 控制器创建一个对话框。在对话框控件中,鼠标可以工作,触摸不行。希望这有些意义。 :) - Ming
同样遇到了一个类似的问题,在拖放之后,当前屏幕上所有可用的按钮都无法检测到触摸事件,我必须进行小范围的平移(触摸和移动),然后按钮才能检测到触摸事件。看起来是执行拖放操作的控件在某些预览事件上监听时间过长,导致无法冒泡到触摸事件:/ - Kohen Holms
我也遇到了这个问题。在模态对话框中,StylusDown和TouchDown不会触发任何控件。用鼠标关闭对话框后,在上一个屏幕中Touch正常工作。唯一的错误是在关闭对话框后第一次拖动某物时出现System runtime interopservices comexception。 - JumpingJezza
1个回答

3
显然,这是WPF中的一个错误。微软决定忽略它,并删除了此处的错误报告: https://connect.microsoft.com/VisualStudio/feedback/details/619521/wpf-touch-bug,引用 Connect is for future versions, not for fixing bugs source

此MSDN论坛线程详细介绍了一些可怜的人试图解决这个问题。请注意,将.Net 4.5.1与Visual Studio 2013升级到最新版本并不能解决该问题。

但他确实找到了一个解决方法,即在新线程上打开对话框。

Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Send, new Action(delegate
{
    var window = new MyWindowView
    {
        IsManipulationEnabled = true,
        Owner = Application.Current.MainWindow,
        Topmost = true
    };
    WindowInteropHelper helper = new WindowInteropHelper(window);
    helper.Owner = helper.Handle;
    window.ShowDialog();
}));

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