我正在开发一个 Windows 商店应用程序,我希望能够在按钮之间拖动,以便最初按下的按钮被停用并且新的“拖到”按钮被激活,但我似乎无法让它工作。
我在 StackPanel 中有 2 个按钮,我在它们上的事件是:
- 指针按下
- 指针已输入
- 指针释放
- 指针已退出
- 指针取消
- 指针捕获丢失
PointerPressed 和 PointerEntered 共享相同的事件处理程序,其余(“停用”事件)共享相同的事件处理程序。
如果我按下一个按钮,我的“已激活”事件处理程序将被触发,如果我将其拖出,我的“已停用”事件处理程序将被触发,但如果我随后拖动到第二个按钮,“已激活”事件处理程序不会再次触发。
奇怪的是,如果我首先从 StackPanel 拖动到其中一个按钮上,则会触发“激活”事件处理程序。我认为这与内部指针管理有关,但似乎找不到解决方法。
有谁知道为什么会发生这种情况以及如何让它按我想要的方式工作?
谢谢你的时间。
编辑
好的,我一直在研究一些东西,我遇到了 CapturePointer() 和 ReleasePointerCapture() 但这似乎被打破了 - 如果我捕获指针,当我将手指从屏幕上移开时,PointerReleased 甚至不会被击中.
我也意识到为什么“从 SP 拖到其中一个按钮上会导致它‘激活’” - 这是因为当按下按钮时,它不会路由其事件而是触发 Click 事件 - 意义相同指针不能触发另一个按钮的 PointerEntered 事件,但如果它在 Button 之外开始,它将触发 PointerEntered。
这并没有让我更进一步,但它是一些额外的信息:)