2014-06-16 6 views
1

Я хочу определить двойной щелчок даже на TreeView, чтобы я мог узнать, какой элемент в TreeView был выбран, и получить его название. То, как я пытаюсь получить его название, дает мне «MyProject.MenuItem». Как я могу ссылаться на выбранный элемент на дереве, убедиться, что это не корень, и получить его название? Что я сделал:Событие двойного щелчка TreeView

<TreeView Name="trvMenu" HorizontalAlignment="Left" Height="312" VerticalAlignment="Top" Width="200" MouseDoubleClick="TreeView_MouseDoubleClick" > 
     <TreeView.ItemTemplate> 
       <HierarchicalDataTemplate DataType="{x:Type local:MenuItem}" ItemsSource="{Binding Items}"> 
        <TextBlock Text="{Binding Title}" /> 
       </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
</TreeView> 

MessageBox показывает «MyProject.MenuItem», что я хочу сделать, это не показывать MessageBox, но, чтобы получить название выбранного элемента TreeView, после проверки его не корень

private void TreeView_MouseDoubleClick(object sender, RoutedEventArgs e) 
    { 
     if (sender is TreeViewItem) 
      if (!((TreeViewItem)sender).IsSelected) 
       return; 
     TreeViewItem tviSender = sender as TreeViewItem; 
     MessageBox.Show(trvMenu.SelectedItem.ToString()); 
    } 
+0

Значит, вам нужно получить доступ к дочерним элементам TreeView в коде? –

+0

http://stackoverflow.com/questions/24197633/recursively-collapse-all-child-nodes-of-parent-node-in-custom-usercontrol/24197901#24197901 – Sajeetharan

+0

Да, дочерние элементы добавляются во время выполнения, а я хотите получить свой титул в коде. @RobertLangdon – Yona

ответ

1

Измените обработчик двойного щелчка, как показано ниже. Вместо того, чтобы звонить ToString, он получает доступ к свойству Title вашего класса MenuItem.

private void TreeView_MouseDoubleClick(object sender, RoutedEventArgs e) 
{ 
    var menuItem = trvMenu.SelectedItem as MyProject.MenuItem; 

    if (menuItem != null) 
    { 
     MessageBox.Show(menuItem.Title); 
    } 
} 
+0

Он не распознает «Заголовок» и не поддается кастингу> _ < – Yona

+0

ОК, я сделал «MessageBox.Show (((MenuItem) trvMenu.SelectedItem) .Title);» но теперь он не даже покажите сообщение. – Yona

+0

Просто поставьте точку останова на странице MessaBox.Show и проверьте trvMenu.SelectedItem и убедитесь, что это объект, который вы ожидаете от него – Krishna

Смежные вопросы