Добавление дочерних элементов поверх дочерних элементов в Windows phone 7 canvas реагирует медленно

#c# #.net #windows-phone-7 #windows-phone-7.1

#c# #.net #windows-phone-7 #windows-phone-7.1

Вопрос:

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

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

  2. Если я уже нарисовал много линий (добавил много дочерних элементов в canvas), то добавление дополнительных линий с другим цветом по сравнению с предыдущими линиями происходит медленно, и точки снова отсутствуют, что приводит к прямым линиям. Я думаю, что это происходит из-за того, что захват точек в событиях 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:

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

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

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

Комментарии:

1. Прежде всего, спасибо Derik за решение. Я протестировал его на своем устройстве, и производительность захвата точек и рисования была значительно увеличена. Теперь я могу рисовать поверх точек. Но все же проблема, которая возникает, заключается в том, что когда я быстро перемещаю палец по холсту, все еще остаются небольшие прямые линии. Другая проблема, которая возникла сейчас, заключается в рисовании букв, таких как V, W, M и т. Д. (Имеющих края), заостренные края рисуются, как если бы мы делали зигзагообразную линию, рисуются дополнительные заостренные края … может ли это быть обработано каким-либо свойством line .

2. Не то, чтобы я знал, но определенно продолжил бы исследования по этому вопросу. Для начала неплохо было бы использовать MSDN или WP7 Dev. Получение ответа занимает больше времени, но они будут очень полезны.

3. также перейдите к MSDN.com и найдите ссылку на класс на кисти и посмотрите, что все это доступно.

4. Извините, Кеано, я назвал вас Дериком, поскольку я был больше сосредоточен на написании контента. Большое спасибо за всю помощь!!

5. Нет проблем, Дерик действительно хороший программист … я слежу за многими его блогами от game design до WP7 и silverlight.