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());
}
}
}