我正在尝试在 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
.