private void ControlLineEndThumb_DragDelta(object sender, DragDeltaEventArgs e) { var thumb = sender as Thumb; Canvas canvas = ControlLine.ControlLineCanvas.canvas; Point endPos = ControlLine.End.GetPos(e.HorizontalChange, e.VerticalChange); Point startPos = ControlLine.Start.GetPos(); if (endPos.X < 0) { endPos.X = 0; } else if (endPos.X > canvas.ActualWidth - ControlLine.End.ActualWidth) { endPos.X = canvas.ActualWidth - ControlLine.End.ActualWidth; } if (endPos.Y < 0) { endPos.Y = 0; } else if (endPos.Y > canvas.ActualHeight - ControlLine.End.ActualHeight) { endPos.Y = canvas.ActualHeight - ControlLine.End.ActualHeight; } Vector v = Point.Subtract(endPos, startPos); ControlLine.End.SetPos(endPos); ControlLine.Mid.SetPos(new Point(startPos.X + v.X / 2, startPos.Y + v.Y / 2)); ControlLine.UpdateLine(); thumb.UpdateLayout(); e.Handled = true; }
private void ControlLineMidThumb_DragDelta(object sender, DragDeltaEventArgs e) { var thumb = sender as Thumb; Canvas canvas = ControlLine.ControlLineCanvas.canvas; Point startPos = ControlLine.Start.GetPos(e.HorizontalChange, e.VerticalChange); Point midPos = ControlLine.Mid.GetPos(e.HorizontalChange, e.VerticalChange); Point endPos = ControlLine.End.GetPos(e.HorizontalChange, e.VerticalChange); double canvasWidth = canvas.ActualWidth; double canvasHeight = canvas.ActualHeight; double startWidth = ControlLine.Start.ActualWidth; double startHeight = ControlLine.Start.ActualHeight; double endWidth = ControlLine.End.ActualWidth; double endHeight = ControlLine.End.ActualHeight; if (startPos.X < 0) { double diff = 0 - startPos.X; startPos.X += diff; midPos.X += diff; endPos.X += diff; } else if (startPos.X > canvasWidth - startWidth) { double diff = startPos.X - canvasWidth + startWidth; startPos.X -= diff; midPos.X -= diff; endPos.X -= diff; } if (startPos.Y < 0) { double diff = 0 - startPos.Y; startPos.Y += diff; midPos.Y += diff; endPos.Y += diff; } else if (startPos.Y > canvasHeight - startHeight) { double diff = startPos.Y - canvasHeight + startHeight; startPos.Y -= diff; midPos.Y -= diff; endPos.Y -= diff; } if (endPos.X < 0) { double diff = 0 - endPos.X; startPos.X += diff; midPos.X += diff; endPos.X += diff; } else if (endPos.X > canvasWidth - endWidth) { double diff = endPos.X - canvasWidth + endWidth; startPos.X -= diff; midPos.X -= diff; endPos.X -= diff; } if (endPos.Y < 0) { double diff = 0 - endPos.Y; startPos.Y += diff; midPos.Y += diff; endPos.Y += diff; } else if (endPos.Y > canvasHeight - endHeight) { double diff = endPos.Y - canvasHeight + endHeight; startPos.Y -= diff; midPos.Y -= diff; endPos.Y -= diff; } ControlLine.Start.SetPos(startPos); ControlLine.Mid.SetPos(midPos); ControlLine.End.SetPos(endPos); ControlLine.UpdateLine(); thumb.UpdateLayout(); e.Handled = true; }