C# 可移动自定义控件
我有一个自定义控件,我希望用户能够拖动它。因此,我在自定义控件中添加了以下代码:C# 可移动自定义控件,c#,wpf,controls,C#,Wpf,Controls,我有一个自定义控件,我希望用户能够拖动它。因此,我在自定义控件中添加了以下代码: void MoveableStackPanel_MouseMove(object sender, MouseEventArgs e) { if (IsMoving) { Point newLoc = e.GetPosition(null); MainWindow.Instance.Title = newLoc.ToStr
void MoveableStackPanel_MouseMove(object sender, MouseEventArgs e)
{
if (IsMoving)
{
Point newLoc = e.GetPosition(null);
MainWindow.Instance.Title = newLoc.ToString(); // Debug
Margin = new Thickness(newLoc.X - 48, newLoc.Y - 48, 0, 0);
}
}
请注意代码中的“-48”。
当鼠标向上或向左移动时,鼠标不再位于控制区域,因此不再触发MouseMove事件。所以我加了-48两次来解决这个问题。但是,当用户移动鼠标的速度超过框架可以更新的速度时,鼠标将离开控件区域,控件也将不再移动
我在考虑分配一个IMovableInterface,并保留以主窗体移动的控件列表等等,但这一切都是如此的麻烦等等。。。正确的解决方案是什么
注意:控件是动态生成的,所以我需要C代码而不是XML的解决方案。尝试使用
看看这样的东西是否适合你
void moveableStackPanel1_MouseUp(object sender, MouseButtonEventArgs e)
{
ReleaseMouseCapture();
}
void moveableStackPanel1_MouseDown(object sender, MouseButtonEventArgs e)
{
if (IsEnabled && IsVisible)
CaptureMouse();
}
void moveableStackPanel1_MouseMove(object sender, MouseEventArgs e)
{
if (IsMouseCaptured)
{
Point newLoc = e.GetPosition(null);
Margin = new Thickness(newLoc.X, newLoc.Y, 0, 0);
}
}