WPF TreeView PreviewMouseDown на TreeViewItem - PullRequest
0 голосов
/ 01 июня 2010

Если я обработаю событие PreviewMouseDown в TreeViewItem, я получу события для всего, что я нажимаю на TreeViewItem, включая небольшое поле +/- слева (Windows XP). Как я могу это различить?

Я попробовал следующее:

// We've had a single click on a tree view item
// Unfortunately this is the WHOLE tree item, including the +/-
// symbol to the left. The tree doesn't do a selection, so we
// have to filter this out...
MouseDevice device = e.Device as MouseDevice;

// This is bad. The whole point of WPF is for the code
// not to know what the UI has - yet here we are testing for
// it as a workaround. Sigh...

// This is broken - if you click on the +/- on a item, it shouldn't
// go on to be processed by OnTreeSingleClick... ho hum!
if (device.DirectlyOver.GetType() != typeof(Path))
{
    OnTreeSingleClick(sender);
}

Что мне нужно, так это просто щелкнуть мышью по элементу представления дерева, исключая дополнительные биты, которые он включает.

Ответы [ 2 ]

0 голосов
/ 02 июня 2010

Мое решение состоит в том, чтобы использовать событие SelectionItemChanged, кажется, чтобы избежать проблем с кнопкой +/-.

0 голосов
/ 02 июня 2010

Если мое понимание верно, e.OriginalSource должен содержать элемент управления, на который вы фактически щелкнули. Убедитесь, что это TextBlock (или что-то еще в вашем TreeView). Вы также можете использовать что-то вроде этого поста , чтобы определить, к какому TreeViewItem принадлежит OriginalSource, если вы параноик.

...