Захватить щелчок по элементу TreeView

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

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


person themaestro    schedule 25.06.2011    source источник


Ответы (1)


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

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

[РЕДАКТИРОВАТЬ]

Вы можете справиться с 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;
}
person Alex Aza    schedule 25.06.2011
comment
Что, если бы я хотел, чтобы реакция была именно на нажатие кнопки? Я не хочу неприятных задержек в UX. - person themaestro; 25.06.2011
comment
@themaestro - Я могу показать, как вы можете обрабатывать событие MouseLeftButtonDown, но у вас будет та же проблема, что и сейчас. Причина в том, что выбранный элемент изменяется после события MouseLeftButtonDown, но до MouseLeftButtonUp. - person Alex Aza; 25.06.2011