Вот в примере от 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, но тут тоже много ньюансов — можно увести курсор, свернуть приложение и т.д. и все это надо обрабатывать и обновлять стейт.
А есть какие-то более надежные и простые способы добиться адекватного поведения ?
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов