如何让用户在页面的任何位置拖放WPF用户控件?

时间:2009-02-04 08:55:07

标签: wpf user-controls drag-and-drop

现在我可以在WPF中创建有用的用户控件了(感谢this stackoverflow answer)我希望能够在一个页面中将多个用户控件放在两列中,并使用户能够根据它移动它们偏好,将他们最常使用的那些拖到顶部等等。

有人能指出我这样做的代码,教程等吗?我可以想象这在WPF中很容易做到。

7 个答案:

答案 0 :(得分:4)

Here是一篇博客文章,旨在帮助您开始使用WPF中的拖放功能。

玩得开心。

答案 1 :(得分:1)

Bea Stollnitz还有How can I drag and drop items between data bound ItemsControls?

文章讨论了一组可重复使用的装饰器,可以在控件之间实现拖放。

它有点先进,但非常有用。

答案 2 :(得分:1)

一系列博客posts,使用附加属性处理拖放。

答案 3 :(得分:0)

我知道这不是你需要的,但它可能会让你接近!!!

Martin Grayson在Codeplex上有一个名为Blacklight的项目...查看Drag dock Panel !!!

答案 4 :(得分:0)

我一直在寻找一种简单的方法来实现这一点,并且遇到了以下网页:http://dotnetslackers.com/ADO_NET/re-191632_Generic_WPF_Drag_and_Drop_Adorner.aspx看起来这个实现有一些不错的功能。

答案 5 :(得分:0)

为了将来参考,codeproject上有一个很棒的库,它有一个DragCanvas,可以拖动放在它上面的任何控件:

http://www.codeproject.com/KB/WPF/WPFJoshSmith.aspx

如果你想在控件之间制作“附件”,它还包含一个CenteredContentControl。

答案 6 :(得分:0)

校正:

private void Control_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
        isDragging = true;
        var draggableControl = sender as UserControl;
        clickPosition = e.GetPosition(this.Parent as UIElement);
        var transform = RenderTransform as TranslateTransform;
        if (transform != null) {
            clickPosition.X -= transform.X;
            clickPosition.Y -= transform.Y;
        }
        draggableControl.CaptureMouse();
}