0

我正在开发一个 Windows 商店应用程序,我希望能够在按钮之间拖动,以便最初按下的按钮被停用并且新的“拖到”按钮被激活,但我似乎无法让它工作。

我在 StackPanel 中有 2 个按钮,我在它们上的事件是:

  • 指针按下
  • 指针已输入
  • 指针释放
  • 指针已退出
  • 指针取消
  • 指针捕获丢失

PointerPressed 和 PointerEntered 共享相同的事件处理程序,其余(“停用”事件)共享相同的事件处理程序。

如果我按下一个按钮,我的“已激活”事件处理程序将被触发,如果我将其拖出,我的“已停用”事件处理程序将被触发,但如果我随后拖动到第二个按钮,“已激活”事件处理程序不会再次触发。

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

有谁知道为什么会发生这种情况以及如何让它按我想要的方式工作?

谢谢你的时间。

编辑

好的,我一直在研究一些东西,我遇到了 CapturePointer() 和 ReleasePointerCapture() 但这似乎被打破了 - 如果我捕获指针,当我将手指从屏幕上移开时,PointerReleased 甚至不会被击中.

我也意识到为什么“从 SP 拖到其中一个按钮上会导致它‘激活’” - 这是因为当按下按钮时,它不会路由其事件而是触发 Click 事件 - 意义相同指针不能触发另一个按钮的 PointerEntered 事件,但如果它在 Button 之外开始,它将触发 PointerEntered。

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

4

1 回答 1

1

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

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

于 2013-08-21T15:24:59.240 回答