| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > WPF и Silverlight > Drag & Drop, нюансы |
| Автор: AleksPingvin 21.5.2011, 21:22 |
| Добрый вечер уважаемые комрады! Несмотря на то, что моя предыдущая тема так и осталась без ответа, рискну задать еще один вопрос. Имеется ListBox (в нем лежат например кнопки), на него повешены обработчики событий PreviewMouseDown, DragOver, Drop - перетаскивание реализованно стандартно. Однако клик на кнопку не проходит.. как я понял из-за того, что я подписан на PreviewMouseDown событие. Если делать подписку на MouseDown, то кнопки кликаются, но перестают таскаться итемы ListBox. Подскажите как быть? Надо что бы и таскалось и если надо то кликалось. |
| Автор: -Mikle- 21.5.2011, 22:21 |
| Мне неизвестно, каким образом вы все делаете. Проблема может быть где угодно. |
| Автор: AleksPingvin 22.5.2011, 06:19 | ||||
| Согласен.. телепаты в отпуске... Извините, писал ночью - не сообразил по подробней расписать Итак вот кусок XAML:
Вот код обработчика нажатия:
При таком раскладе когда я кликаю на свертывание-развертывание экспандера или тестовую кнопку внутри него - то они не нажимаются. |
| Автор: -Mikle- 22.5.2011, 11:56 | ||||
Нет, это из-за того, что при клике ты сразу начинаешь операцию Drag&Drop. В твоем случае могу предложить не начинать операцию Drag пока юзер не начнет движение мышкой. Чтобы дать пользователю некую лояльность при кликах (как правило случайную), можно задать некую область в которой ему разрешено двигаться при нажатой левой кнопке до того, как начнется перетаскивание. В примере ниже задается такая область ±5 пикселей.
Весь этот код можно оформить в виде AttachedProperty чтобы в дальнейшем его можно было использовать с любым контролом. |
| Автор: AleksPingvin 22.5.2011, 21:29 |
| Самое смешное, что я вчера об этом думал... но не придал значение. Действительно все дело было именно в этом) Спасибо! |
| Автор: -Mikle- 22.5.2011, 23:29 |
| Рад помочь. Приходи еще. |