2014-06-16 117 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> 

的消息框显示“MyProject.MenuItem”,我想要做的是不显示一个消息框,但要获得所选树视图项目的标题,检查之后没有根

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,而是访问MenuItem项目类的Title属性。

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