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