【问题标题】:Drag finger from one button to another - want to un-trigger old button and trigger new button - Windows Store将手指从一个按钮拖到另一个按钮 - 想要取消触发旧按钮并触发新按钮 - Windows Store
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 啊,是的,我刚才一直在阅读这个,发现了关于 Click 事件的东西(正如我在“编辑”中输入的那样)所以我想我应该只使用一个 Rectangle 和样式它是一样的。更改按钮的外观 OnPress、OnEnter 和 Normal 是如何工作的?就像我如何让 Rectangle 做同样的事情?是否必须以编程方式完成,或者我可以用 XAML 和视觉样式等做一些花哨的东西吗?
    • 好的,我现在已经完成了 - 我创建了自己的控件,它几乎是一个按钮,但不会停止任何“可冒泡”事件,例如 OnPointerEntered/OnPointerExited。跨度>
    猜你喜欢
    • 2020-08-01
    • 1970-01-01
    • 2011-11-23
    • 2021-07-18
    • 2022-01-09
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    相关资源
    最近更新 更多