Как AllowDrop только для определенных типов? - PullRequest
0 голосов
/ 16 ноября 2010

Я использую LibraryBar для отображения некоторых элементов, которые имеют отношение. Поскольку между элементами существуют разные отношения, у меня есть несколько контейнеров. В качестве настройки по умолчанию, если для параметра LibraryBar установлено значение AllowDrop, равное true, можно перетаскивать все элементы в LibraryBar, и элементы добавляются в коллекцию, где они удаляются.

Теперь я не хочу этого. Я не хочу, чтобы можно было перетащить элемент из одного LibraryBar в другой. Однако я не могу просто установить AllowDrop в false, потому что я хочу перетащить некоторые TagVisualizations в LibraryBar.

Итак, я определил в своем методе, который обрабатывает DropEvents:

public void OnTargetDrop(object sender, SurfaceDragDropEventArgs e)
        {
            //only if TagVisualization
            if (e.Cursor.Data is Image)
            {
                ((sender as LibraryBar).Tag as ISourceFile).unexpand();
                e.Handled = true;
            }
            else
            {
                //TODO: cancel Drag&Drop
            }
        }

Как вы можете видеть, я разрешаю удаление только в том случае, если данные курсора являются изображением (и, следовательно, я теперь TagVisualization). Это работает, больше невозможно поместить элемент из другой библиотеки библиотек в эту библиотеку. Однако анимация, которая воспроизводится, если элемент перетаскивается через библиотечную панель, все еще воспроизводится. Как я могу также отключить эту анимацию для определенных типов?

1 Ответ

1 голос
/ 16 ноября 2010

Добавить обработчик события для события DragCompleted.Установите handled равным true для любых типов, которые вы хотите исключить.DragCompletedEventArgs также имеет свойство Cursor.Data.

...