Silverlight: определите, какой элемент управления инициировал перетаскивание - PullRequest
0 голосов
/ 14 июля 2010

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

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

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

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

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

1 Ответ

1 голос
/ 15 декабря 2010

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

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

            }
        }
...