如何解决在画布中拖放WPF项目
我正在尝试在屏幕上移动炉石覆盖物,这种方式或多或少都很好,但是我的问题是,当我从左拖动覆盖物以进行书写然后想要再次移动覆盖物时,光标会全部跳回我的叠加层离开的方式。
这是我的代码:
public bool Toggle()
{
if (Hearthstone_Deck_Tracker.Core.Game.IsRunning && _mouseInput == null)
{
_mouseInput = new User32.MouseInput();
_mouseInput.LmbDown += MouseInputOnLmbDown;
_mouseInput.LmbUp += MouseInputOnLmbUp;
_mouseInput.MouseMoved += MouseInputOnMouseMoved;
return true;
}
Dispose();
return false;
}
public void Dispose()
{
_mouseInput?.Dispose();
_mouseInput = null;
}
private void MouseInputOnLmbDown(object sender,EventArgs eventArgs)
{
var position = User32.GetMousePos();
mousePos0 = new Point(position.X,position.Y);
overlayPos0 = new Point(_config.posLeft,_config.posTop);
if (PointInsideControl(mousePos0,_tribes))
{
_selected = "tribes";
}
_config.save();
}
private void MouseInputOnLmbUp(object sender,EventArgs eventArgs)
{
var pos = User32.GetMousePos();
if (_selected == "tribes")
{
_config.tribePosTop = overlayPos0.Y + (pos.Y - mousePos0.Y);
_config.tribePosLeft = overlayPos0.X + (pos.X - mousePos0.X);
}
_selected = null;
_config.save();
}
private void MouseInputOnMouseMoved(object sender,EventArgs eventArgs)
{
if (_selected == null)
{
return;
}
var pos = User32.GetMousePos();
if (_selected == "tribes")
{
Canvas.SetTop(_tribes,overlayPos0.Y + (pos.Y - mousePos0.Y));
Canvas.SetLeft(_tribes,overlayPos0.X + (pos.X - mousePos0.X));
}
}
private bool PointInsideControl(Point p,FrameworkElement control)
{
var position = control.PointFromScreen(p);
return position.X > 0 && position.X < control.ActualWidth && position.Y > 0 && position.Y < control.ActualHeight;
}
这是我的WPF用户控件(叠加层),我试图在屏幕上四处移动
<Grid x:Name="panel" HorizontalAlignment="Center" VerticalAlignment="Center" >
<Image x:Name="imgTribes" Stretch="Fill" Width="150" Height="150"></Image>
</Grid>
当我将其放到屏幕上的某个位置并再次拖动之后,我希望它从该位置开始,如何实现呢? 非常感谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。