意外操作完成,第一笔绘图被缩短

本文关键字:一笔 绘图 操作 意外 | 更新日期: 2023-09-27 18:27:38

我正在尝试在Canvas派生类上实现徒手绘制。我已经实现了ManipulationXXX事件的处理程序,它们如下所示:

private void OnManipulationStarted(object o, ManipulationStartedEventArgs a)
{
    Point pt = GetManPoint(a.ManipulationOrigin, a.ManipulationContainer);
    Debug.WriteLine("Down at {0},{1}", pt.X, pt.Y);
    m_Strokes.Add(m_Stroke = new Stroke(pt, this));
    CaptureMouse();
    a.Handled = true;
}
private void OnManipulationDelta(object o, ManipulationDeltaEventArgs a)
{
    if (m_Stroke != null)
    {
        Point pt = GetManPoint(a.ManipulationOrigin, a.ManipulationContainer);
        Debug.WriteLine("Delta at {0},{1}", pt.X, pt.Y);
        m_Stroke.AddPoint(pt);
        a.Handled = true;
    }
}
private void OnManipulationCompleted(object o, ManipulationCompletedEventArgs a)
{
    if (m_Stroke != null)
    {
        Debug.WriteLine("Up");
        ReleaseMouseCapture();
        Point[] Pts = m_Stroke.Points;
        m_Stroke = null;
        a.Handled = true;
    }
}

还没有在实际设备上尝试过,但在模拟器上,有一个持续的问题。对于笔划的第一次尝试,ManipulationCompleted事件在ManipulationStarted之后立即触发。即使我没有松开鼠标按钮。我可以通过调试输出来判断——在"Down"之后有"Up"。随后的笔划画得很好(如果有些滞后的话)。

还有人熟悉这个吗?这是模拟器独有的功能,还是该设备也有同样的功能?

我在这里指的Stroke类是Polyline上的一个薄包装器。

意外操作完成,第一笔绘图被缩短

我在模拟器上经历了同样的行为。但在真实的设备上,它可以毫无问题地工作(你可以在这里测试真实的设备http://rda.cellulardata.com/devices)