События мыши на Treeview - PullRequest
       15

События мыши на Treeview

0 голосов
/ 05 ноября 2011

Я хочу в окне wpf установить древовидное представление и использовать его через события мыши. В частности, я бы хотел, чтобы сложная фигура рисовалась на холсте щелчком мыши по каждому элементу дерева. Однако я не уверен, может ли древовидное представление служить этой цели, поскольку выполненная мною реализация, похоже, не работает вообще. События мыши не работают (делегаты не запускаются). Может ли кто-нибудь указать мне причину? Посмотрите на код:

<TreeView DockPanel.Dock="Left" Background="DarkGray" HorizontalAlignment="Left" VerticalAlignment="Top">
    <TreeViewItem Header="Input Data">
        <TreeViewItem Header="Vector" MouseEnter="create_Rhombus"/>
        <TreeViewItem Header="Array"/>
    </TreeViewItem>
    <TreeViewItem Header="Maths">
        <TreeViewItem Header="Add" MouseDown="create_AddRectangle"/>
        <TreeViewItem Header="Subtract" MouseDown="create_SubtractRectangle"/>
        <TreeViewItem Header="Multiply" MouseDown="create_MultiplyRectangle"/>
        <TreeViewItem Header="Divide" MouseDown="create_DivideRectangle"/>
    </TreeViewItem>
</TreeView>

Методы в коде файла:

private void create_AddRectangle(object sender, MouseButtonEventArgs e)

private void create_SubtractRectangle(object sender, MouseButtonEventArgs e)

....

Однако вышеупомянутые методы не вызываются. Почему?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2011

Это, вероятно, из-за функциональности выбора, событие мыши помечается как обработанное внутри.Попробуйте вместо этого использовать туннелирование версий таких событий (т.е. PreviewMouseDown).

0 голосов
/ 13 июня 2017

Я думаю, что может быть ошибка с использованием туннелирования (т.е. PreviewMouseDown). Я реализовал это, и он срабатывает правильно, но если я пытаюсь получить доступ к DataContext, я получаю объект {DisconnectedItem}. Судя по чтению, которое я сделал в Интернете, это похоже на ошибку в WPF.

Я обнаружил, что могу связать события MouseLeftButtonDown и MouseRightButtonDown для одного TreeViewItem с одним и тем же методом, и он будет работать точно так же, как вы ожидаете, что событие MouseDown будет работать.

...