#c# #wpf #xaml #treeview #mouseevent
#c# #wpf #xaml #просмотр дерева #mouseevent
Вопрос:
Я хочу в окне wpf установить treeview и использовать его через события мыши. В частности, я хотел бы, чтобы сложная фигура рисовалась на холсте щелчком мыши по каждому элементу treeview. Однако я не уверен, что treeview может служить этой цели, поскольку созданная мной реализация, похоже, вообще не работает. События мыши не работают (делегаты не запускаются). Может ли кто-нибудь указать мне причину? Взгляните на код:
<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)
….
Однако вышеуказанные методы не вызываются. Почему?
Ответ №1:
Предположительно, из-за функциональности выбора событие мыши помечается как обработанное внутри. Попробуйте вместо этого использовать туннельные версии таких событий (т. Е. PreviewMouseDown
).
Ответ №2:
Я думаю, что может быть ошибка с использованием туннелирования (ie PreviewMouseDown
). Я реализовал это, и оно срабатывает правильно, но если я попытаюсь получить доступ к DataContext, я получу {DisconnectedItem}
объект. Судя по тому, что я прочитал в Интернете, это ошибка с WPF.
Я обнаружил, что могу подключить MouseLeftButtonDown
и MouseRightButtonDown
события для одного TreeViewItem
к одному и тому же методу, и он будет работать точно так же, как вы ожидаете, что MouseDown
событие будет работать.