Вот в примере от MS например
https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/drag-and-drop-overview
очевидна проблема что если зажать кнопку LeftButton вне эллипса и провести по нему мышкой то сработает DoDragDrop, что не является ожидаемым поведением.
private void ellipse_MouseMove(object sender, MouseEventArgs e)
{
Ellipse ellipse = sender as Ellipse;
if (ellipse != null && e.LeftButton == MouseButtonState.Pressed)
{
DragDrop.DoDragDrop( ellipse,
ellipse.Fill.ToString(),
DragDropEffects.Copy);
}
}
Обычно делал предварительно запоминание что был MouseDown и потом уже MouseMove, но тут тоже много ньюансов — можно увести курсор, свернуть приложение и т.д. и все это надо обрабатывать и обновлять стейт.
А есть какие-то более надежные и простые способы добиться адекватного поведения ?
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Здравствуйте, okon, Вы писали:
Перетаскивание (Drag and Drop). Меня такая реализация обычно устраивала.
Здравствуйте, okon, Вы писали:
O>private void ellipse_MouseMove(object sender, MouseEventArgs e)
"Простой" drag&drop начинвается с MouseDown. Краем глаза глянул MSDN, не знаю почему там так, возможно дальше развитие событий. Для красивого drag&drop нужно что-то делать с adorner (
первый результат гугла).
Здравствуйте, BlackEric, Вы писали:
BE> Меня такая реализация обычно устраивала.
Не яблоко.
Здравствуйте, okon, Вы писали:
O>А есть какие-то более надежные и простые способы добиться адекватного поведения ?
как вариант, взять
https://github.com/punker76/gong-wpf-dragdrop
Здравствуйте, okon, Вы писали:
O>Вот в примере от MS например https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/drag-and-drop-overview
O>очевидна проблема что если зажать кнопку LeftButton вне эллипса и провести по нему мышкой то сработает DoDragDrop, что не является ожидаемым поведением.
Посмотрите в Янусе
DragStartDetector и его
использоватение. Там же есть DragExpandDetector — помогает узнать, когда нужно "раскрыть" что-то при перетягивании, например, узел дерева.
Поищу потом по закромам, кажется была где-то немного исправленная версия этих типчиков.