我有一个图像块(这些图像嵌入边框控件中),它们排列成4行4列。当用户从一个图像从左到右或从右到左或对角线从一个图像滑动到另一个图像时,我想知道所遍历的图像是什么?
我找到了MouseEnter和MouseLeave事件。但是如果用户触摸image1(在第1行中)并拖动滑动到image4,则鼠标如何知道用户是否完成了滑动?因为用户可能会在将图像留在图像4后触摸屏幕上的任何位置。
捕获那些遍历图像的最佳方法是什么?列表或字典?
答案 0 :(得分:1)
根据这篇文章...... http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseleftbuttondown(v=vs.95).aspx
您可以使用 MouseLeftButtonDown 事件
检测MOUSE SWIPE STARTED IN的WHICH tile / square然后,如果用户将鼠标滑过不同的对象,如文章所说....
LeftMouseButtonUp 事件将执行,尽管LeftMouseButtonDown WONT执行与另一个方块/图块/图像中发生的ACTUAL down事件相同的图块!!
所以如果你有一个简单的4x4矩阵/数组来保存SWIPE YES / MO值... 像1或是鼠标滑过THROUGH这个元素和0没有鼠标永远不会这个瓷砖/图像/元素...然后你应该没事...
并使用古老的规则......
如果X1> X2然后鼠标移动是从右到左(向左移动)
如果X2> X1然后鼠标移动从左到右(向右移动)
如果Y1> Y2然后鼠标移动向上(向上移动)
如果Y2> Y1然后鼠标移动向上(向下移动)
混合并匹配对角线移动/滑动的规则......
其中X1,Y1是MouseDown屏幕值和X2,Y2是MouseUp屏幕值
根据备注部分的文字......
当鼠标指针悬停在UIElement上时,按下鼠标左键(或当触控笔的笔尖接触平板电脑时)会引发MouseLeftButtonDown事件。释放鼠标按钮(或触控笔的笔尖)时,会引发MouseLeftButtonUp事件。但是,如果在释放按钮时鼠标指针(或手写笔)移动到另一个对象上,则接收MouseLeftButtonDown事件的UIElement将仅接收MouseLeftButtonUp事件(如果该UI元素已明确捕获鼠标)。没有离散的双击事件。双击包含两个MouseLeftButtonDown和MouseLeftButtonUp事件序列。可以使用事件数据(ClickCount)捕获点击计数。
使用基于MouseButtonEventHandler的处理程序来处理此事件。有关如何处理鼠标事件的更多信息,请参阅鼠标支持。
鼠标捕获是一种概念,即即使鼠标指针(或手写笔)不再位于对象的边界区域上,对象也可以继续接收鼠标事件。要请求鼠标捕获,鼠标左键(或手写笔)必须处于按下(向下)状态。因此,调用CaptureMouse的代码中的一个共同点是来自特定UIElement的MouseLeftButtonDown处理程序。有关鼠标捕获及其有用场景的更多信息,请参阅鼠标支持或如何:在UI布局中拖放对象。
所以与我的第一个解决方案相反对不起,我一定是误读了这些评论,虽然第一段开始MOUSE CAPTURE是一个概念.... 澄清你应该仍然能够捕获鼠标注册事件,即使它是在INITIAL CONTROL外面调用鼠标事件意味着MOUSEDOWN事件并且来自ORIGINAL控件,所以说你从control1开始你的滑动,以及Control1 MouseLeftButtonDown事件触发然后你需要捕获鼠标(有关鼠标捕获及其有用的场景的更多信息,请参阅鼠标支持或如何:在UI布局中拖放对象)然后如你所说,你在控制2和手指上滑动/ pointer / stylus isover control3你释放鼠标然后ORIGINAL CAPTURED mouseup事件将触发CONTROL,它捕获鼠标(在本例中为control1)并使用屏幕X / Y位置和你的控件X / Y / Width / HEIGHT属性你应该能够评估鼠标被释放的控制权。
如果我有更多的时间,我会更多地阅读它并保存自己不会给你几乎正确的信息而不是正确的信息,我建议你仔细阅读这篇文章,并按照鼠标捕获过程尝试并且不要忘记当你释放鼠标时,即使它可能超过另一个控制器,对于捕获鼠标的CONTROL也将触发ACTUAL mouseup事件。
对不起我之前的错误 - 那就是当你跳过阅读时会发生什么。