簡體   English   中英

如果鼠標移到畫布邊界之外,如何處理矩形繪制

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM