我已经创建了自己的可拖动控件。拖动非常简单:
bool moving = false; Point click = new Point(0, 0);
private void _MouseDown(object sender, MouseButtonEventArgs e)
{
moving = true;
click = Mouse.GetPosition(this);
}
private void _MouseUp(object sender, MouseButtonEventArgs e) { moving = false; }
private void _MouseMove(object sender, MouseEventArgs e)
{
if (moving == true)
{
Point po = Mouse.GetPosition(this);
this.Margin = new Thickness(this.Margin.Left + (po.X - click.X), this.Margin.Top + (po.Y - click.Y), 0, 0);
}
}
我的问题是,如果我拖得太快,光标“逃脱”我的控制。很明显为什么,但是如何解决这个问题并不太明显,因为我无法在窗口中轻松订阅其他控件的鼠标移动,而且我的控件很小(约35,15像素),所以这种情况发生了很多。我认为,如果我可以轻松地强制鼠标光标留在控件中,这将是一个解决方案(虽然不理想)。 那么解决这个问题的麻烦方法是什么?专业控制如何处理这个?
P.S。我正在学习WPF,所以我可能做错了什么
答案 0 :(得分:0)
您的光标会在快速移动时离开用户控件,并且不再触发MouseMove事件。
正如作者在Drag Drop UserControls中使用周围Canvas的MouseMove事件所做的评论所说的应该有所帮助。
答案 1 :(得分:0)
我已经弄明白了,使用计时器非常简单。
bool moving = false; Point click = new Point(0, 0);
System.Timers.Timer _MOVER = new System.Timers.Timer();
public PersonControl()
{
InitializeComponent();
_MOVER.Elapsed += new System.Timers.ElapsedEventHandler((o, v) => { Dispatcher.Invoke(Move); });
_MOVER.Enabled = true;
_MOVER.Interval = 10;
}
private void _MouseDown(object sender, MouseButtonEventArgs e)
{
moving = true;
click = Mouse.GetPosition(this);
Canvas.SetZIndex(this, 100);
_MOVER.Start();
}
private void _MouseUp(object sender, MouseButtonEventArgs e)
{
moving = false;
Canvas.SetZIndex(this, 0);
_MOVER.Stop();
}
private void Move()
{
if (moving == true)
{
Point po = Mouse.GetPosition(this);
this.Margin = new Thickness(this.Margin.Left + (po.X - click.X), this.Margin.Top + (po.Y - click.Y), 0, 0);
}
}