Воспроизведение рисунка от руки - PullRequest
0 голосов
/ 16 августа 2011

У меня есть холст, на котором можно сделать рисунок от руки (аналогично этому http://www.windowsphonegeek.com/tips/drawing-in-wp7-2-drawing-shapes-with-finger). Мое требование, я должен сделать рисование воспроизвести и сделать паузу программно. Есть кнопка, при нажатии рисунок должен бытьВоспроизведение так, как он был нарисован. Пожалуйста, сообщите мне, какие шаги необходимо предпринять для достижения этой цели, также если есть какой-либо образец приложения или ссылка доступна. Спасибо.

1 Ответ

0 голосов
/ 17 августа 2011

Обновление: наконец-то я нашел способ исправить это, чтобы оно работало в Windows Phone 7, а не только в WPF.

На основе приведенного вами примера.

Определение списка точек:

private List<Point> _points;

Когда кнопка LeftMouseButton выключена AND Up добавить пустую точку и начальную точку:

oldPoint = currentPoint;
_points.Add(new Point(-1, -1));
_points.Add(oldPoint);

Ваш обработчик событий кнопки Play будет выглядеть следующим образом:

canvas.Children.Clear();

// Use the BackgroundWorker to draw the lines
BackgroundWorker worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync();

worker_DoWork перебирает точки _ и отправляет их нашему диспетчеру:

void worker_DoWork(object sender, DoWorkEventArgs e)
{
        for (int ix = 0; ix < _points.Count - 1; ix++)
        {
            Point start = _points[ix];
            Point end = _points[ix + 1];

            if (start.X == -1 || end.X == -1)
                continue;

            Thread.Sleep(10);
            DoEvents(start, end);
        }
}

DoEvents использует Dispatcher дляотправить координаты линии делегированному методу

    private delegate void AddLineDelegate(Point p1, Point p2);

    private void DoEvents(Point p1, Point p2)
    {
        this.Dispatcher.BeginInvoke(new AddLineDelegate(AddLine), new object[] { p1, p2 });
    }

    private void AddLine(Point p1, Point p2)
    {
        Line line = new Line() { X1 = p1.X, Y1 = p1.Y, X2 = p2.X, Y2 = p2.Y };
        line.Stroke = new SolidColorBrush(Colors.Black);
        line.StrokeThickness = 4;
        this.canvas.Children.Add(line);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...