#c# #.net #windows-phone-7 #windows-phone-7.1
#c# #.net #windows-phone-7 #windows-phone-7.1
Вопрос:
Я использую canvas в приложении wp7 silverlight. Я столкнулся с двумя проблемами.
-
Итак, событие Canvas_MouseLeftButtonDown захватывает одну точку, а затем в событии MouseMove я захватываю другую точку, а затем рисую линию и добавляю эти дочерние элементы в холст. Все идет хорошо, за исключением того, что в событии перемещения мыши некоторые точки между двумя пропущены, если я двигаю пальцем немного быстрее, и в результате я получаю прямые линии вместо кривых. Для захвата точки я использую e.GetPosition(где e — тип MouseButtonEventArgs и MouseEventArgs).Есть ли другой способ, с помощью которого я могу захватить точку, например, используя класс Touch.
-
Если я уже нарисовал много линий (добавил много дочерних элементов в 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.