Добавление детей над детьми в Windows Phone 7 холст реагирует медленно - PullRequest
0 голосов
/ 04 октября 2011

Я использую canvas в приложении wp7 silverlight.Я сталкиваюсь с двумя проблемами.

  1. Итак, событие Canvas_MouseLeftButtonDown захватывает одну точку, а затем в событии MouseMove я собираю другую точку, а затем рисую линию и добавляю этих детей в Canvas.Все идет хорошо, за исключением того, что в случае перемещения мыши некоторые точки пропускаются между двумя, если я немного двигаю пальцем, и в результате я получаю прямые линии вместо кривых.Для захвата точки я использую e.GetPosition (где e это тип MouseButtonEventArgs и MouseEventArgs). Есть другой способ, с помощью которого я могу захватить точку, как при использовании класса Touch.

  2. Если у меня уже естьнарисовано много линий (добавлено много дочерних элементов на холст), затем добавление большего количества линий с другим цветом по сравнению с предыдущими линиями происходит медленно, а точки снова отсутствуют, что приводит к прямым линиям.Я думаю, что это происходит потому, что захват точек в событиях MouseMove над уже нарисованной областью становится медленным, а средние точки отсутствуют.

Поэтому, пожалуйста, предложите мне какие-либо решения или способ справиться с этим проблемным сценарием.По сути, я должен добавить детей к детям разного цвета и разного размера удара, когда палец перемещается по холсту.

Я прилагаю свою текущую логику, поэтому, пожалуйста, скажите мне, где я отстаю.

Заранее спасибо.

Код:

    void myCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        currentPoint = e.GetPosition(myCanvas);
        oldPoint = currentPoint;
    } 

    void myCanvas_MouseMove(object sender, MouseEventArgs e)
    {
            currentPoint = e.GetPosition(myCanvas);
            Line line = new Line() { X1 = currentPoint.X, Y1 = currentPoint.Y, X2 = oldPoint.X, Y2 = oldPoint.Y };
            line.Stroke = new SolidColorBrush(myColor);
            line.StrokeThickness = 10;
            line.StrokeStartLineCap = PenLineCap.Round;
            line.StrokeEndLineCap = PenLineCap.Round;
            this.myCanvas.Children.Add(line);
            oldPoint = currentPoint;
        }
    }

1 Ответ

0 голосов
/ 05 октября 2011

я работал над чем-то очень не так давно, когда у меня были проблемы, я нашел это.

Дерик Уиттакер

Надеюсь, это поможет! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...