Silverlight: определите, какой элемент управления инициировал перетаскивание

Используя функции drag'n'drop в Silverlight 4 Toolkit, у меня есть Listbox с включенным перетаскиванием, где каждый ListboxItem можно перетаскивать / переупорядочивать вверх и вниз.

Каждый ListboxItem содержит несколько элементов управления (TextBlocks, TextBoxes и Buttons), и моя проблема заключается в том, что, когда я нажимаю кнопки внутри ListboxItem, я иногда инициирую событие перетаскивания, а не просто событие click для этого элемента управления.

Одним из решений было бы обработать событие ItemDragStarting и определить, на что нажали, чтобы запустить событие - и отменить событие, если оно вызывается кнопкой.

Однако я не могу понять, как определить, на что я нажал. Отправитель события и e.DragSource имеет тип ListBoxDragDropTarget, независимо от того, инициирую ли я перетаскивание с кнопки или сам ListboxItem.

Буду признателен за любую помощь - решение моей проблемы или альтернативные методы делать то, что мне нужно!

1 ответ

Решение

Вы можете перейти к типу объекта, используя следующий метод:

private void OldFaithful_ItemDragStarting(object sender, ItemDragEventArgs e)
        {
            SelectionCollection selections = e.Data as SelectionCollection;

            if (selections != null)
            {
                IEnumerable<CXSectionControl> draggedItems = selections.Select(s => s.Item as YOUREXCPECTEDOBJECTTYPE);
                foreach (YOUREXCPECTEDOBJECTTYPE x in draggedItems)
                {
                    MessageBox.Show(x.GetType().ToString());
                }

            }
        }
Другие вопросы по тегам