WPF中的可拖动控件?

时间:2012-04-05 04:13:47

标签: c# wpf xaml drag-and-drop

虽然我在Forms中有一些经验,但我还是WPF的新手,我决定最终尝试弄清楚如何使用WPF。所以,当我得到可拖动的控件时,这就是我想出的代码(我试图改变它以使用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);
    }
}

4 个答案:

答案 0 :(得分:4)

您希望使用adorners来实现拖动,调整大小,旋转等等。

答案 1 :(得分:1)

如果您想手动使用以下算法:

  1. 开启MouseDown事件:保存鼠标位置控制器的TopLeft位置以及这些坐标的delta(偏移),并设置一些布尔字段标志,例如。 IsDragStartted为真。
  2. MouseMove上检查拖动是否已开始并使用鼠标位置和偏移量来计算控制 TopLeft位置的新值

  3. MouseUp事件集IsDragStartted上设置为false

答案 2 :(得分:1)

here是关于MSDN问题的一篇非常好的文章。此外,快速搜索谷歌揭示了一个真正的聚宝盆选择为你DnD用餐乐趣。

答案 3 :(得分:0)

替代方案:

  1. 安装 NuGet 包:Microsoft.Xaml.Behaviors.Wpf
  2. 将此添加到根元素:
xmlns:behaviors="http://schemas.microsoft.com/xaml/behaviors"
  1. 然后把它放在你的元素中:
<Grid>
    <behaviors:Interaction.Behaviors>
        <behaviors:MouseDragElementBehavior ConstrainToParentBounds="True"/>
    </behaviors:Interaction.Behaviors>
</Grid>