Задача - нарисовать линию по выбору соответствующей кнопки на панели инструментов. В своём коде я пробую реализовать следующий алгоритм: кликаем LMB на рабочую область, переносим курсор в другое место, удерживая LMB нажатой, отпускаем LMB - рисуется линия по координатам места, где кнопка была нажата и где отпущена. Объявляю глобальные переменные:
Point EndPosition;
Point StartPosition;
Код:
private void inkCanvas1_MouseDown(object sender, MouseButtonEventArgs e)
{
FrameworkElement fe = sender as FrameworkElement;
StartPosition = e.MouseDevice.GetPosition(fe);
}
private void Line_Click(object sender, RoutedEventArgs e)
{
linePressed = true;
}
private void inkCanvas1_MouseUp(object sender, MouseButtonEventArgs e)
{
FrameworkElement fe = sender as FrameworkElement;
EndPosition = e.MouseDevice.GetPosition(fe);
if (linePressed)
{
this.inkCanvas1.EditingMode = InkCanvasEditingMode.Ink;
Line l = new System.Windows.Shapes.Line();
l.X1 = StartPosition.X;
l.X2 = EndPosition.X;
l.Y1 = StartPosition.Y;
l.Y2 = EndPosition.Y;
l.Stroke = Brushes.Red;
l.StrokeThickness = 5;
inkCanvas1.Children.Add(l);
}
}
В результате линии рисуются следующим образом:
Как можно это исправить?
P.S Пробовал выводить координаты EndPosition в момент рисования в консоли, но безуспешно.
Установите в InkCanvas свойство EditingMode="None" и не меняйте его в коде. В режиме EditingMode="Ink" элемент не отслеживает событие MouseDown
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости