как готовить Drag&Drop
От: okon  
Дата: 20.01.19 21:34
Оценка:
Вот в примере от 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, но тут тоже много ньюансов — можно увести курсор, свернуть приложение и т.д. и все это надо обрабатывать и обновлять стейт.
А есть какие-то более надежные и простые способы добиться адекватного поведения ?
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Re: как готовить Drag&Drop
От: BlackEric http://black-eric.lj.ru
Дата: 21.01.19 07:16
Оценка:
Здравствуйте, okon, Вы писали:

Перетаскивание (Drag and Drop). Меня такая реализация обычно устраивала.
https://github.com/BlackEric001
Re: как готовить Drag&Drop
От: Sinatr Германия  
Дата: 21.01.19 08:33
Оценка:
Здравствуйте, okon, Вы писали:

O>private void ellipse_MouseMove(object sender, MouseEventArgs e)


"Простой" drag&drop начинвается с MouseDown. Краем глаза глянул MSDN, не знаю почему там так, возможно дальше развитие событий. Для красивого drag&drop нужно что-то делать с adorner (первый результат гугла).
---
ПроГLамеры объединяйтесь..
Re[2]: как готовить Drag&Drop
От: Sinatr Германия  
Дата: 21.01.19 08:35
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE> Меня такая реализация обычно устраивала.


Не яблоко.
---
ПроГLамеры объединяйтесь..
Re: как готовить Drag&Drop
От: HotDog Швейцария www.denebspace.com
Дата: 21.01.19 10:13
Оценка: +1
Здравствуйте, okon, Вы писали:

O>А есть какие-то более надежные и простые способы добиться адекватного поведения ?


как вариант, взять https://github.com/punker76/gong-wpf-dragdrop
Re: как готовить Drag&Drop
От: _FRED_ Черногория
Дата: 03.02.19 17:00
Оценка:
Здравствуйте, okon, Вы писали:

O>Вот в примере от MS например https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/drag-and-drop-overview

O>очевидна проблема что если зажать кнопку LeftButton вне эллипса и провести по нему мышкой то сработает DoDragDrop, что не является ожидаемым поведением.

Посмотрите в Янусе DragStartDetector и его использоватение. Там же есть DragExpandDetector — помогает узнать, когда нужно "раскрыть" что-то при перетягивании, например, узел дерева.

Поищу потом по закромам, кажется была где-то немного исправленная версия этих типчиков.
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.