C# WPF中的可拖动控件?

C# WPF中的可拖动控件?,c#,wpf,xaml,drag-and-drop,C#,Wpf,Xaml,Drag And Drop,虽然我在表单方面有一些经验,但我对WPF还是有点陌生,我决定最终尝试找出如何使用WPF。因此,当我谈到可拖动控件时,这就是我提出的代码(我试图将其更改为与WPF一起使用,但控件只是到处抖动): 您需要使用来实现拖动、调整大小、旋转等操作。如果您需要手动操作,请使用以下算法: 在MouseDown事件中:保存鼠标位置、控件的左上角位置和这些坐标的增量(偏移),并将一些布尔字段标志设置为true,例如isdragstarted 在MouseMove上,检查拖动是否已启动,并使用鼠标位置和偏移量计算控

虽然我在表单方面有一些经验,但我对WPF还是有点陌生,我决定最终尝试找出如何使用WPF。因此,当我谈到可拖动控件时,这就是我提出的代码(我试图将其更改为与WPF一起使用,但控件只是到处抖动):


您需要使用来实现拖动、调整大小、旋转等操作。

如果您需要手动操作,请使用以下算法:

  • MouseDown
    事件中:保存鼠标位置、控件的左上角位置和这些坐标的增量(偏移),并将一些布尔字段标志设置为true,例如
    isdragstarted
  • MouseMove
    上,检查拖动是否已启动,并使用鼠标位置和偏移量计算控件左上角位置的新值

  • MouseUp上
    事件集
    isdragstart
    为false

  • 这是一篇关于MSDN的非常好的文章。此外,在谷歌上快速搜索,你会发现一个名副其实的聚宝盆,为你提供各种选择和用餐乐趣。

    备选方案:

  • 安装NuGet软件包:
    Microsoft.Xaml.Behaviors.Wpf
  • 将此添加到根元素:
  • xmlns:behaviors=”http://schemas.microsoft.com/xaml/behaviors"
    
  • 只需将其放在元素中:
  • 
    
    我真的很想从头开始编写代码,比如只使用事件和边距等基本内容。这对于拖动控件来说真的不是一个明智的想法,这是一项相当“不平凡”的任务。否则WPF就不会从一开始就引入装饰器的概念:)装饰器真的是一条路要走
    private void rectangle1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed) {
            double x = this.Left + (double)e.GetPosition(this).X - (double)rectangle1.Margin.Left;
            double y = this.Top + (double)e.GetPosition(this).Y - (double)rectangle1.Margin.Top;
            rectangle1.Margin = new Thickness(x, y, rectangle1.Margin.Right, rectangle1.Margin.Bottom);
        }
    }