Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可移动自定义控件_C#_Wpf_Controls - Fatal编程技术网

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);
        }
    }