2013-05-16 4 views
4

Я проблема с событием в WPF. Скажем, у меня есть базовая модель данных и древовидное представление для представления данных. Самое простое, что я хочу сделать, - когда я нажимаю на один элемент, я бы сделал что-то с базовыми данными, связанными с этим элементом.WPF TreeView item clicked

Я попытался использовать событие MouseLeftButtonDownTextblock, но тогда объект-отправитель является только Textblock и я не могу получить доступ к базовым данным.

Теперь я также попытался использовать MouseLeftButtonDown событие TreeViewItem как это:

<TreeView.ItemContainerStyle> 
    <Style TargetType="{x:Type TreeViewItem}"> 
     <EventSetter Event="MouseLeftButtonDown" Handler="itemClicked"/> 
    </Style> 
</TreeView.ItemContainerStyle> 

Но я не получил обработчик называется.

Так как же я должен это делать? Есть ли какой-то стандартный подход?

Спасибо, продвинутый!

+0

использование SelectedItemChanged события, обратите внимание, что клавиатура получит событие называется как хорошо – makc

+0

@makc Спасибо за вклад! Но я не хочу, чтобы обработчик вызывался, когда выбранный элемент изменяется, но когда пользователь дважды нажимает на элемент. –

+0

Это не то, что вы описали в вопросе, вы попробовали событие MouseDoubleClick? – makc

ответ

5

Событие MouseLeftButtonDown - это пузырящееся событие, с которым он столкнулся где-то в своем маршруте мой выбор выбора. Вы можете использовать snoop, чтобы узнать, кто обработал событие. Использование PreviewMouseLeftButtonDown/SelectedItemChanged или в вашем случае MouseDoubleClick решит проблему.

<TreeView> 
    <TreeView.ItemContainerStyle> 
    <Style TargetType="{x:Type TreeViewItem}"> 
     <EventSetter Event="MouseDoubleClick" 
       Handler="itemDoubleClicked"/> 
    </Style> 
    </TreeView.ItemContainerStyle> 
</TreeView>