private void MainCanvas_MouseDown(object sender, MouseButtonEventArgs e) { Canvas canvas = sender as Canvas; if (canvas == null) { return; } if (medianMode) { if (lastClickedLine != null) { Line median = lastClickedLine.GetMedian(e.GetPosition(canvas)); MyLine line = new MyLine(median); lines.Add(median, line); MainCanvas.Children.Add(median); medianMode = false; } return; } if (heightMode) { if (lastClickedLine != null) { Line height = lastClickedLine.GetHeight(e.GetPosition(canvas)); MyLine line = new MyLine(height); lines.Add(height, line); MainCanvas.Children.Add(height); heightMode = false; } return; } HitTestResult hitTestResult = VisualTreeHelper.HitTest(canvas, e.GetPosition(canvas)); if (hitTestResult.VisualHit is Line selectedLine) { if (morphingLine != null && selectedLine == morphingLine) { return; } ICanvasObject myLine = lines[selectedLine]; if (Keyboard.IsKeyDown(Key.LeftCtrl) == false) { foreach (var line in currentSelection) { line.Deselect(); } currentSelection.Clear(); currentGroupSelection.Clear(); } //Select new element if (currentSelection.Contains(myLine) == false) { myLine.Select(); currentSelection.Add(myLine); currentSelection.Last().Select(); lastClickedLine = selectedLine; lbEquation.Text = $"Уравнение: {lastClickedLine.GetLineConstants()}"; } } else if (hitTestResult.VisualHit is Canvas) { foreach (var line in currentSelection) { line.Deselect(); } currentSelection.Clear(); } //Save mouse position previousMousePosition = e.GetPosition(canvas); isMousePressed = true; }