Как нарисовать линию движением мыши с помощью C # - PullRequest
1 голос
/ 14 ноября 2011

Я хочу нарисовать линию на холсте в wpf движением мыши. Начиная с определенной формы и нажав левую кнопку мыши, я хочу нарисовать линию точно в том месте, где движется мышь. Для этого я добавил три обработчика событий, подробно описанных в следующих строках кода:

private void output_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        Console.WriteLine(parentCanvas.Name);
        Console.ReadLine();
        isMouseDragging = true;
      /*    rectCanvas.MouseLeftButtonDown -= new MouseButtonEventHandler(Canvas_MouseLeftButtonDown);
        rectCanvas.MouseLeftButtonUp -= new MouseButtonEventHandler(Canvas_MouseLeftButtonUp);
        rectCanvas.MouseMove -= new MouseEventHandler(Canvas_MouseMove);  */

->       parentCanvas.MouseMove += new MouseEventHandler(output_MouseMove);


    }


  private void output_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        isMouseDragging = false;

    }

    private void output_MouseMove(object sender, MouseEventArgs e)
    {
        if (isMouseDragging && e.LeftButton == MouseButtonState.Pressed)
        {
            connection_Line = new Polyline();
            connection_Line.Stroke = System.Windows.Media.Brushes.SlateGray;
            connection_Line.StrokeThickness = 2;
            connection_Line.FillRule = FillRule.EvenOdd;
   ->       var point = e.GetPosition();
            PointCollection myPointCollection = new PointCollection();
            myPointCollection.Add(point);
            connection_Line.Points = myPointCollection;
            parentCanvas.Children.Add(connection_Line);


        }
    }

1) Первый вопрос: что добавить в качестве параметра в метод e.GetPosition (), включенный в последний метод, чтобы всегда иметь текущую точку, где находится мышь.

2) Во-вторых, если разумно добавить обработчик событий на родительский холст для обработки перемещения мыши (в output_MouseLeftButtonDown) или он должен быть добавлен другим способом (не в parentCanvas)?

3) Наконец, если ожидается, что вся функциональность будет работать должным образом или есть лучший способ нарисовать линию движением мыши?

1 Ответ

1 голос
/ 14 ноября 2011

Я реализовал линию, которая нарисована почти так же, как ваша.Единственная разница в том, что моя строка определена в представлении xaml и является частью специального пользовательского контроля, полученного из canvas.На ваши вопросы:

1.) Параметр в getPosition - это InputElement, который относится к позиции, которую вы хотите узнать.Поскольку рисование происходит на вашем родительском канве, используйте это.

2.), Как упоминалось выше, родительский холст - это ваш корневой элемент, поэтому лучше всего было бы присоединить ваш mouseHandler к parentCanvas MouseMove

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

<Path x:Name="path" Stroke="Black" StrokeThickness="2" Data="{Binding PathGeometry}">

HTH

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