Как распознать щелчок мышью по строке? - PullRequest
0 голосов
/ 26 сентября 2011

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

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

Спасибо.

Ответы [ 3 ]

4 голосов
/ 26 сентября 2011

Вот рабочий пример: (реализуя то, что Бала предложил в своем комментарии)

private void myCanvas_Loaded(object sender, RoutedEventArgs e)
        {
            Line line = new Line();

            line.MouseDown += new MouseButtonEventHandler(line_MouseDown);
            line.MouseUp   += new MouseButtonEventHandler(line_MouseUp);

            line.Stroke = Brushes.Black;
            line.StrokeThickness = 2;
            line.X1 = 30; line.X2 = 80;
            line.Y1 = 30; line.Y2 = 30;

            myCanvas.Children.Add(line);
        }

void line_MouseUp(object sender, MouseButtonEventArgs e)
        {
            // Change line colour back to normal 
            ((Line)sender).Stroke = Brushes.Black;
        }

void line_MouseDown(object sender, MouseButtonEventArgs e)
        {
            // Change line Colour to something
            ((Line)sender).Stroke = Brushes.Red;
        }

Учитывая, что у вас уже есть логика для добавления строк в канву,

Просто добавьтедва обработчика событий (как указано выше) для каждой добавляемой строки.

0 голосов
/ 26 сентября 2011

Я бы посоветовал вам добавить собственный обработчик событий MouseDown на ваш холст.В самом деле, если ваши строки очень тонкие, вам нужно позволить пользователю щелкнуть рядом со строкой, чтобы выделить ее.

Для этого в вашем собственном обработчике MouseDown итерируйте свои строки и выполните следующие действия:

Для каждой строки:

  • Создайте прямоугольник с длиной линии, равной ширине и высоте = max (lineWidth, 10px),
  • Поворот координат мышивокруг центра прямоугольника с углом, равным углу линии (вычислите его с помощью math.atan2),
  • Проверьте, лежат ли новые координаты мыши внутри прямоугольника,
  • Если это так, выберите текущийудержание и перерыв.
0 голосов
/ 26 сентября 2011

Взгляните на этот проект: http://www.codeproject.com/KB/WPF/WPF_DrawTools.aspx

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