Захват Нажмите на элемент TreeView - PullRequest
1 голос
/ 25 июня 2011

Есть ли способ явно зафиксировать щелчок по элементу TreeView?

В настоящее время я нахожусь в положении, когда телевизор представляет своего рода меню параметров для пользователей.Обычно я просто использовал бы на телевизоре событие SelectedItemChanged , но есть возможность повторного щелчка пользователем элемента дважды подряд, что не вызовет это событие.Я рассмотрел идею размещения прослушивателя событий на панели стека, которая содержит элементы в каждом узле, но проблема в том, что это событие запускается до изменения выбранного элемента на узле.Поэтому, если вы нажмете на панель стека, вы получите событие, но не сможете получить связанный элемент.Любые идеи о том, как выбраться из этого?

1 Ответ

3 голосов
/ 25 июня 2011

Вы можете обработать событие MouseLeftButtonUp для TreeView.

private void treeView1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    var selectedItem = treeView1.SelectedItem;
}

[EDIT]

Вы можете обработать MouseLeftButtonDown, но SelectedItem не будет изменен в данный момент. Что вы можете сделать, так это получить доступ к e.OriginalSource, чтобы узнать, какой элемент был нажат. Я проверил приведенный ниже пример с деревом <TreeViewItem />, поэтому элемент был TextBlock. Если вы попробуете приведенный ниже код, измените приведение типов в соответствии с вашим сценарием.

public MainPage()
{
    InitializeComponent();
    treeView1.AddHandler(MouseLeftButtonDownEvent, new MouseButtonEventHandler(treeView1_MouseLeftButtonDown), true);
}

private void treeView1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    var selectedElement = (TextBlock)e.OriginalSource;
}
...