如何以相同的触摸在多个 UIElement 上触发 ManipulationStarted?

Posted

技术标签:

【中文标题】如何以相同的触摸在多个 UIElement 上触发 ManipulationStarted?【英文标题】:How to fire ManipulationStarted on multiple UIElement with the same touch? 【发布时间】:2016-08-16 03:34:45 【问题描述】:

我有一个带有 4 个 UIElement 的网格。我已经为所有元素订阅了 ManipulationStarted 和 ManipulationCompleted 事件。

在 ManipulationStarted 上更改元素的颜色,在 ManipulationCompleted 上将其设置回原来的颜色。

这有效,但仅适用于一个项目,如果我点击一个项目,然后在不离开手指的情况下移动到另一个项目,它不会改变颜色。

为了更清楚:

这是我打开应用程序时看到的。网格中的 4 个 UIElement(矩形)。

这是我将手指放在矩形上时看到的。

当我将手指放在一个矩形上,然后在不抬起手指的情况下将手指移到另一个矩形上时,这就是我想要发生的事情,但它没有发生。它只适用于一个矩形。

这是每个矩形上的事件代码:

private void Rectangle_ManipulationStarted(object sender, System.Windows.Input.ManipulationStartedEventArgs e)

    e.Handled = true;
    if(sender is Rectangle)
        ((Rectangle)sender).Fill = new SolidColorBrush(Colors.Purple);


private void Rectangle_ManipulationCompleted(object sender, System.Windows.Input.ManipulationCompletedEventArgs e)

    e.Handled = true;
    if (sender is Rectangle)
        ((Rectangle)sender).Fill = originalColor;

【问题讨论】:

您是否试图使交互类似于您按住一个矩形并将手指移动到另一个矩形,而不是您移动手指的矩形变成与您移动的矩形相同的颜色起源于? 这更像是您有一个默认颜色(在我的情况下为紫色),应该将其设置为您在移动手指时触摸的每个矩形。当您松开手指时,它们会恢复原来的颜色。 唷,这是一个广泛的问题,只能代表我自己,但这需要一些修补时间。您的操作/触摸事件将与启动它们的对象相关联。在我看来,您的情况基本上需要一些碰撞检测。或者....如果它们的大小是固定的,那么有逻辑会更容易,比如对象的操作>宽度(或高度)然后兄弟改变它的颜色,你可以将它传递给基于旁边或上方/下方的任何东西关于操作的 X 或 Y 方向。 【参考方案1】:

解决了! :D

我在矩形上使用了 MouseEnter 事件来更改颜色,并在包含它们的网格上使用 MouseLeave 将其设置回原来的颜色!它完美无缺! :D

【讨论】:

以上是关于如何以相同的触摸在多个 UIElement 上触发 ManipulationStarted?的主要内容,如果未能解决你的问题,请参考以下文章

WPF中的多点触摸事件

从 ViewModel 触发 UIElement 的操作

Javascript 触摸事件没有被触发

Google地图图块仅在触摸设备上触发dragend时加载

触摸事件未在 QQuickView 上触发

IOS/Objective-C:检测 UIVIew 上的滑动和屏幕相同位置的按钮触摸