[英]how to draw a rectangle on a canvas with mouse, but see the rectangle while moving the mouse
[英]How to Handle Drawing a Rectangle if the Mouse Moves Outside of the Canvas Bounds
我有一些代码可以在Canvas
上绘制矩形。 这一切都很好,但是,当鼠标离开Canvas
的边界时,矩形的图形将冻结并且什么也没有发生。 一些代码
<Canvas x:Name="canvas" MouseDown="Canvas_MouseDown" MouseMove="Canvas_MouseMove" MouseUp="Canvas_MouseUp" Background="Transparent" />
private Point startPoint;
private Rectangle rect;
private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
{
startPoint = e.GetPosition(canvas);
rect = new Rectangle
{
Stroke = Brushes.LightBlue,
StrokeThickness = 2
};
Canvas.SetLeft(rect,startPoint.X);
Canvas.SetTop(rect,startPoint.X);
canvas.Children.Add(rect);
}
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
if(e.LeftButton == MouseButtonState.Released || rect == null)
return;
var pos = e.GetPosition(canvas);
var x = Math.Min(pos.X, startPoint.X);
var y = Math.Min(pos.Y, startPoint.Y);
var w = Math.Max(pos.X, startPoint.X) - x;
var h = Math.Max(pos.Y, startPoint.Y) - y;
rect.Width = w;
rect.Height = h;
Canvas.SetLeft(rect, x);
Canvas.SetTop(rect, y);
}
private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
{
rect = null;
}
我想要的是继续绘制矩形,即使我超出了Canvas
的边界,但很明显,矩形的尺寸已裁剪到Canvas
的边界。
实现此目标的最佳方法是什么?
您应该在MouseDown处理程序中捕获鼠标
private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
{
canvas.CaptureMouse();
...
}
并在MouseUp处理程序中释放捕获
private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
{
...
canvas.ReleaseMouseCapture();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.