TreeViewItem: Как сделать так, чтобы изменение выделения происходило по щелчку вместо MouseDown? - PullRequest
4 голосов
/ 21 октября 2011

Фон: я использую Drag & Drop из TreeView.Требование заключается в том, что перетаскивание элемента должно , а не изменить выбор - только полный щелчок (MouseUp на том же элементе) должен выбрать этот элемент.

Однако поведение TreeView по умолчанию:вызвать событие SelectedItemChanged для MouseDown.Есть идеи, как это изменить?

Спасибо!

РЕДАКТИРОВАТЬ: я забыл упомянуть важный момент - мои извинения.Я использую Gong drag & drop Framework для всех операций перетаскивания, так как он очень хорошо сочетается с MVVM (в моих представлениях код не требуется).Логика перетаскивания полностью обрабатывается в ViewModels через вложенные свойства в XAML представлений.

Поэтому решения, включающие PreviewMouseDown и обработку всей логики выбора и перетаскивания, будут контрпродуктивными.Поэтому я просто ищу (простой) способ предотвратить изменение элемента управления TreeView, уже выделенного мышью, при этом вызывая обычные всплывающие события, такие как MouseDown, MouseMove и т. Д., Чтобы библиотека перетаскивания работалакак было задумано.

Моя следующая идея заключается в том, чтобы изменить код библиотеки перетаскивания Gong самостоятельно - я просто надеялся, что смогу избежать этого, и кто-то придумает простой способ изменить поведение TreeView в этом отношении.

1 Ответ

0 голосов
/ 22 октября 2011

Вы можете использовать события туннелирования , такие как PreviewMouseDown на TreeViewItems, они будут обработаны до того, как событие достигнет внутренних органов управления, поэтому вы можете перехватить их, установив e.Handled = true.Используйте это событие в связи с туннельными версиями MouseMove и MouseUp для реализации некоторой пользовательской логики перетаскивания и выбора.

Возможно, вам придется перехватить все события и выбрать вручную, если перетаскивание отсутствует, но, возможно, выможет выработать что-то лучшее или более элегантное.Я надеюсь, что это поможет вам сделать это.

...