Создание обработчика событий для TreeViewItem в WPF
Im добавляет элементы в элемент управления TreeView через свойство ItemsSource и свойство ItemTemplate, чтобы задать шаблон для TreeViewItem. Как добавить обработчик событий для обработки события изменения выбора в TreeViewItems?
на данный момент моя ItemTemplate выглядит так:
<Window.Resources><DataTemplate x:Key="PeerDetailTemplate">
<TextBlock Text="{Binding DESCRIPTION}" Tag="{Binding ID}" GotFocus="GetModules"/>
</DataTemplate></Window.Resources>
Но это не работает (GetModules не вызывается). Я новичок в WPF, поэтому покажите мне правильное направление, чтобы делать такие вещи, пожалуйста.
3 ответа:
Если вы хотите захватить событие SelectedItemChanged в TreeView, то вам нужно установить обработчик событий на родительском узле, т. е.
XAML
<StackPanel> <TreeView SelectedItemChanged="OnTreeViewSelectedItemChanged"> <TreeViewItem Header="Desktop"> <TreeViewItem Header="Computer" /> <TreeViewItem Header="My Documents" /> <TreeViewItem Header="c:\" /> </TreeViewItem> <TreeViewItem Header="Recyle Bin" > <TreeViewItem Header="foo.txt" /> <TreeViewItem Header="bar.txt" /> <TreeViewItem Header="fizz.buzz" /> </TreeViewItem> <TreeViewItem Header="Control Panel" > <TreeViewItem Header="Programs" /> <TreeViewItem Header="Security" /> <TreeViewItem Header="User Accounts" /> </TreeViewItem> </TreeView> <TextBlock Margin="20" x:Name="MyTextBlock" /> </StackPanel>
Код За Спиной:
private void OnTreeViewSelectedItemChanged( object sender, RoutedPropertyChangedEventArgs<object> e ) { MyTextBlock.Text = ( (TreeViewItem) ( (TreeView) sender ).SelectedItem ).Header.ToString(); }
Вам нужно будет добавить обработчик событий в событие SelectedItemChanged TreeView.
<TreeView x:Name="myTreeView" SelectedItemChanged="myTreeView_SelectedItemChanged" ItemTemplate="{StaticResource PeerDetailTemplate} />
Так как это срабатывает после изменения выбора, вы можете использовать свойство выбранного элемента TreeView для доступа к элементу древовидного представления:
private void myTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) { TreeViewItem selectedItem = (TreeViewItem)myTreeView.SelectedItem; // do stuff }
Выбор и выбор и фокус - это два разных понятия. Похоже, вы заинтересованы в выборе, который в данном случае является свойством TreeView. Событие TreeView.SelectedItemChanged уведомит вас об изменениях выбора и свойстве TreeView.SelectedItem сообщит вам, что выбрано.