Как разрешить пользователю перетаскивать/удалять элементы управления WPF в любом месте страницы?
Теперь, когда я могу сделать полезные пользовательские элементы управления в WPF (спасибо qaru.site/info/507226/...), я хочу иметь возможность размещать многочисленные пользовательские элементы управления на одной странице в двух столбцах и позволяют пользователю иметь возможность перемещать их в соответствии с предпочтением, перетаскивая те, которые они используют больше всего на верх, и т.д.
Может ли кто-нибудь указать мне код, учебники и т.д., которые это делают? Я могу представить, что это было сделано довольно легко в WPF.
Ответы
Ответ 1
Там также Как перетаскивать элементы между связанными данными ItemsControls? от Bea Stollnitz.
В статье рассказывается о многократном наборе украшений, которые позволяют drag-n-drop между элементами управления.
Это несколько продвинутый, но очень полезный.
Ответ 2
Здесь - это сообщение в блоге, чтобы начать работу с функцией перетаскивания в WPF.
Получайте удовольствие.
Ответ 3
Серия блога сообщения, посвященные перетаскиванию с использованием прикрепленных свойств.
Ответ 4
Я знаю, что это не совсем то, что вам нужно, но оно может вас закрыть!
Мартин Грейсон имеет проект на Codeplex, называемый Blacklight... Проверьте панель "Перетащить панель".
Ответ 5
Я искал простой способ добиться этого и наткнулся на следующую веб-страницу: http://dotnetslackers.com/ADO_NET/re-191632_Generic_WPF_Drag_and_Drop_Adorner.aspx Похоже, что там являются некоторыми хорошими функциями этой реализации.
Ответ 6
Для справки в будущем есть большая библиотека в кодепроекте с DragCanvas, которая позволяет вам перетаскивать любые элементы управления, размещенные на ней:
http://www.codeproject.com/KB/WPF/WPFJoshSmith.aspx
Он также содержит CenteredContentControl, если вы хотите сделать "вложения" между элементами управления.
Ответ 7
Исправление:
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();
}