gpt4 book ai didi

wpf - 使对象在 MouseDown 上跟随鼠标,在 MouseUp 上跟随 "Stick"

转载 作者:行者123 更新时间:2023-12-02 08:54:57 27 4
gpt4 key购买 nike

我正在处理一个 WPF 和 VB.net 项目。我想在视觉上模拟“拖动”一个对象(尽管我出于目的不想使用标准拖放)。

基本上,我有一个标签对象,在其 MouseDown 事件中,我希望它在 640x480 实体大小的网格内(但不在网格外!)跟随鼠标光标。请注意,此网格位于全屏窗口的中央。同样,对象不应在网格外跟随鼠标(我猜这里是“ClipToBounds = True”)

然后,在标签的 MouseUp 事件中,我希望它要么停留在当前位置,要么返回到其原始位置,这由另一个对象的 MouseEnter 属性设置的 bool 变量值决定。

请注意,如果使用起来更容易,我可以轻松地将网格更改为 Canvas 。我猜这是可取的。

那么,在冗长的解释之后,这是我的问题(双重):

  1. 如何使对象(标签)在网格/ Canvas 内跟随鼠标光标,但不在其外?这需要在标签的 MouseDown 事件上发生。

  2. 如何让对象“固定”在当前位置? (由此,我大概可以想出如何让它自己回到原来的位置。:D)

我投票给任何能帮助我最有效地完成这个目标的人!非常感谢大家。

最佳答案

这样的事情怎么样:

XAML:

<Canvas x:Name="canv" ToolTip="tt one" Width="400" Height="400" Background="Blue">
<Rectangle x:Name="rec" Fill="Red" Height="50" Width="50" MouseDown="Rectangle_MouseDown" MouseMove="Rectangle_MouseMove" MouseUp="Rectangle_MouseUp" />
</Canvas>

代码隐藏:

    private bool isDragging;
private void Rectangle_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
rec.CaptureMouse();
isDragging = true;

}

private void Rectangle_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
if (isDragging)
{
Point canvPosToWindow = canv.TransformToAncestor(this).Transform(new Point(0, 0));

Rectangle r = sender as Rectangle;
var upperlimit = canvPosToWindow.Y + (r.Height / 2);
var lowerlimit = canvPosToWindow.Y + canv.ActualHeight - (r.Height / 2);

var leftlimit = canvPosToWindow.X + (r.Width / 2);
var rightlimit = canvPosToWindow.X + canv.ActualWidth - (r.Width / 2);


var absmouseXpos = e.GetPosition(this).X;
var absmouseYpos = e.GetPosition(this).Y;

if ((absmouseXpos > leftlimit && absmouseXpos < rightlimit)
&& (absmouseYpos > upperlimit && absmouseYpos < lowerlimit))
{
Canvas.SetLeft(r, e.GetPosition(canv).X - (r.Width / 2));
Canvas.SetTop(r, e.GetPosition(canv).Y - (r.Height / 2));
}
}
}

private void Rectangle_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
rec.ReleaseMouseCapture();
isDragging = false;
}

这段代码可以改进,但我想你明白了 ;)

关于wpf - 使对象在 MouseDown 上跟随鼠标,在 MouseUp 上跟随 "Stick",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5659237/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com