0

Есть WrapPanel заполнена Label, в итоге получено поле 10x10. Label создаются динамически, к ним цепляется два ивента

 la.Drop += lbl_Drop;
 la.MouseDown += lbl_MouseDown;

 private void lbl_MouseDown(object sender, MouseButtonEventArgs e)
 {
    Label lbl = (Label)sender;
    DragDrop.DoDragDrop(lbl, lbl.Content, DragDropEffects.All);
 }

 private void lbl_Drop(object sender, DragEventArgs e)
 {
     ((Label)sender).Background = new SolidColorBrush(Colors.Blue);
 }

При попытке его перетянуть появляется значок, который указывает что так делать нельзя, в чём проблема?

orion_gm
  • 311
  • А почему это вообще должно работать? Вы перемещаете строку, почему это должно перемещать контрол? – VladD Apr 19 '16 at 09:03
  • Вот код: http://ru.stackoverflow.com/a/444924/10105, он умеет перемещать даже между окнами. Никакого DoDragDrop и тому подобной тяжёлой артиллерии не нужно. – VladD Apr 19 '16 at 21:07

1 Answers1

2

Чтобы дроп сработал, нужно включить AllowDrop у перетаскиваемого объекта и источника. Из описания события Drop:

Чтобы событие Drop произошло и вызвало обработчик, значение AllowDrop для UIElement, являющегося целевым объектом перетаскивания, а также источника действия перетаскивания, должно быть true.

И Drop надо обрабатывать на элементе, который принимает, а не на перетаскиваемом. Из той же статьи, описание эвента Drop:

Происходит, когда система ввода сообщает об основном событии перетаскивания, в котором данный элемент является местом назначения.

icebat
  • 191