1

При этом Node не выделен. TreeView заполняется через ObservableCollection.

  • Используйте команду и InputBingings. Пример: https://ru.stackoverflow.com/a/735522/218063 – Андрей NOP Apr 21 '18 at 02:45
  • 2
    Это абсолютно ничего не меняет. Как видно в том примере, InputBingings можно прикрутить и к Border. А вообще InputBindings это свойство UIElement, поэтому оно есть у всех контролов – Андрей NOP Apr 21 '18 at 10:47
  • Нужный вам gesture называется RightClick. Вот здесь полный перечень мышиных жестов: https://msdn.microsoft.com/ru-ru/library/system.windows.input.mouseaction(v=vs.110).aspx Их можно использовать также с клавишами-модификаторами: https://msdn.microsoft.com/ru-ru/library/system.windows.input.mousebinding.gesture(v=vs.110).aspx – Андрей NOP Apr 21 '18 at 11:05
  • @АндрейNOP Я создал команду и привязываю ее в своем шаблоне TreeViewItem(TreeView многоколоночный) в Border, обработчик события этой команды помещаю, пока в кодбех MainWindow. Но сам факт размещения в шаблоне кода привязки к команде, делает запуск программы не возможным - <Приложение находится в режиме приостановки>. Вот строка привязки . – Алекс Дронго Apr 22 '18 at 08:31
  • А если написать Executed="PkmNode_Executed"? – Андрей NOP Apr 22 '18 at 08:45
  • Ошибка корневой элемент "ResourceDictionary" требует атрибута x:Class для поддержки обработчиков событий в файле XAML – Алекс Дронго Apr 22 '18 at 08:48
  • Ошибка корневой элемент "ResourceDictionary" требует атрибута x:Class для поддержки обработчиков событий в файле XAML - ну дык вы поместите CommandBinding в разметку окна. Почитайте это: https://professorweb.ru/my/WPF/binding_and_styles_WPF/level9/9_4.php Но вообще, по правильному, команда должна быть у вас во ViewModel (паттерн MVVM) – Андрей NOP Apr 22 '18 at 09:00
  • @АндрейNOP. Все сработало)) Спасибо)). – Алекс Дронго Apr 22 '18 at 09:09

1 Answers1

2

Так как св-во TreeView(MouseRightButtonDown) ничего мне не дало, я воспользовался советом Андрей NOP и использовал команду InputBingings. Итак:

  1. Создал команду pkmNode во ViewModel;

    private static RoutedUICommand pkmNode;
    public static RoutedUICommand PkmNode
    {
        get { return pkmNode; }
    }
    
    public ViewModel()
    {
        // Инициализация команды
        pkmNode = new RoutedUICommand("pkmNode", "pkmNode", typeof(ViewModel));
    }
    
  2. Произвел регистрацию команды PkmNode в конструкторе главного окна

    ViewModel vm;
    
    public General()
    {
        InitializeComponent();
        CommandBinding cb = new CommandBinding();
        vm = new ViewModel(this);
        cb.Command = ViewModel.PkmNode;
        cb.Executed += PkmNode_Executed;
        Window1.CommandBindings.Add(cb);            
        treeView.ItemsSource = vm.LoadNapDB();
    }
    
  3. В шаблоне TreeViewItem в Border через InputBindings привязую ПКМ к своей команде и передаю текcт Node TreeView на котором произошел ПКМ

    <Border.InputBindings>
        <MouseBinding Gesture="RightClick"
                      Command="local:ViewModel.PkmNode"
                      CommandParameter="{Binding MyHeader}"/>
    </Border.InputBindings>
    
  4. Принимаю переданные параметры в своем обработчике команды

    private void PkmNode_Executed(object sender, ExecutedRoutedEventArgs e)
    {  
        var d = e.Parameter;  
    }
    

Еще раз спасибо Андрею NOP за своевременно указанный путь и помощь. Всем удачи))