【问题标题】:WPF: Dragging an Element via Touch is pretty choppyWPF:通过触摸拖动元素非常不稳定
【发布时间】:2011-03-30 23:40:44
【问题描述】:

我有一个可以在某些边界内拖动的矩形。这与鼠标完美搭配。

一旦我将 IsManipulationEnabled 设置为 true,鼠标事件就不再起作用了。 但是我需要这个来获得矩形上的触摸事件。因此我将其设置为 true。

我正在尝试计算 ManipulationDelta 事件中的所有更改,如下面的函数。 缩放效果已经很不错了,但是通过用手指拖动来移动对象非常不稳定+加上有时矩形来回跳跃。

private void UserControl_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
    //Scaling works already pretty good
    RangeBar.Width *= e.DeltaManipulation.Scale.X;

    //Moving the element is very choppy, what am I doing wrong here?
    this.startX = this.startX + e.DeltaManipulation.Translation.X;
    RangeBar.SetValue(Canvas.LeftProperty, startX);
}

【问题讨论】:

  • 嗯,我确实看到了一个危险信号。我不一定认为这与操作与鼠标本身有关,但可能是一个潜在的问题,由于操作性能较差而暴露出来。

标签: c# .net wpf multi-touch


【解决方案1】:

我会尝试使用 CumulativeManipulation。

每当我需要通过拖动来移动 UI 元素时,我不会尝试重用同一个变量并通过 delta 对其进行修改,然后重用同一个变量来设置位置。无论平台如何,它几乎总是会给我带来稳定性问题。相反,尝试在拖动开始时存储一个变量,并仅在需要更新位置时将增量添加到该变量。所以更像这样:

Point origin;

void MouseDown(Point location)
{
   origin = location;
}

void MouseDrag(Vector cumulativeOffset)
{
   SetControlLocation(origin+cumulativeOffset);
}

另外,ManipulationEvent 的来源是什么?您一定要确保它不是当前的矩形,否则肯定会导致您看到的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多