将手指从一个按钮拖动到另一个按钮-希望取消触发旧按钮并触发新按钮-Windows应用商店



我正在开发一个windows商店应用程序,我希望能够在按钮之间拖动,这样原来按下的按钮就会被停用,而新"拖到"的按钮会被激活,但我似乎无法实现这一点。

我在StackPanel中有两个按钮,上面的事件是:

  • 指针已按下
  • PointerEntered
  • 指针已释放
  • 指针已退出
  • 指针已取消
  • PointerCaptureLost

PointerPressed和PointerEntered共享同一事件处理程序,其余("停用"事件)共享同一个事件处理程序。

如果我按下一个按钮,我的"激活"事件处理程序就会被触发,如果我把它拖下来,我的"停用"事件处理程序会被触发,但如果我再拖到第二个按钮上,"激活"的事件处理程序就不会再被触发。

奇怪的是,如果我从StackPanel开始拖动到其中一个按钮上,就会触发"激活"的事件处理程序。我认为这与内部指针管理有关,但似乎找不到解决方法。

有人知道为什么会发生这种情况,以及我如何才能让它按照我的意愿发挥作用吗?

谢谢你抽出时间。

编辑

好吧,我一直在研究一些东西,我遇到了CapturePointer()和ReleasePointerCapture(),但这似乎已经坏了——如果我捕捉到指针,当我把手指从屏幕上移开时,PointerReleased甚至不会被击中。

我还意识到为什么"从SP拖到其中一个按钮上会导致它‘激活’"——这是因为当按下一个按钮时,它不会路由其事件,而是触发Click事件——这意味着同一指针不能触发另一个按钮的PointerEntered事件,但如果它在按钮之外启动,它将触发PointerEntered。

这并没有让我更进一步,但它是一个额外的信息:)

Button的概念在鼠标捕获和拖动方面有点独特。在您的场景中,我不确定Button周围的事件模型是否适合您。在按钮上,当按下指针(鼠标)时,它会被捕获,直到它被释放。这与触摸不同,因为在触摸中,除非你创建它,否则不会有任何明确的捕捉

因此,无论如何,使用Button的鼠标/触摸交互之间会有轻微的冲突——使用其他一些UI元素(不确定你是否有一个样式化的按钮)应该会得到你想要的。

最新更新