2017-06-09 40 views
0

我需要检查用户在每次更改时选择了哪个treeviewitem。我使用了SelectedItemChanged方法或者其他所谓的方法。它工作正常,但现在我需要为每个可能的treeviewitem做一个switch case。但我不能这样做,因为我不知道如何得到它的名字。我在互联网上查过,但有人说使用treeview.SelectedItem,但它返回System.Windows.Controls.TreeViewItem Header: Items.Count:0。我想知道是否可以在.cs代码文件中完全做到这一点,或者如果我必须使用数据绑定等。WPF get treeviewitem的内容

感谢您的帮助。

编辑:

下面是我设置的树形和treeviewitems。他们都像第二个例子。

<TreeView x:Name="treeview" Margin="10,10,0,4" HorizontalAlignment="Left" Width="192" Background="#FFA45353" SelectedItemChanged="treeview_SelectedItemChanged""> 
     <TreeViewItem IsExpanded="False"> 
      <TreeViewItem.Header> 
       <StackPanel Orientation="Horizontal"> 
        <Image Source="./Resources/smallicons/icon.jpg"/> 
        <TextBlock Text=" Main" FontSize="14"/> 
       </StackPanel> 
      </TreeViewItem.Header> 
      <!--==============================================================================================--> 
      <TreeViewItem> 
       <TreeViewItem.Header> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="First" Foreground="Black" /> 
        </StackPanel> 
       </TreeViewItem.Header> 
      </TreeViewItem> 
      <!--==============================================================================================--> 

回答

1

你是在找这个吗?

TreeViewItem selectedNode = (TreeViewItem)treeView.SelectedItem; 
string strSelectedNode = selectedNode.Header.ToString(); 

上面的代码假定几件事情虽然。

顺便说一句,这个代码是

private void TreeViewItem_Selected(object sender, RoutedEventArgs e) 
{ 
    TreeViewItem selectedNode = (TreeViewItem)treeView.SelectedItem; 
    MessageBox.Show(selectedNode.Header.ToString()); 
} 
+0

没想到它的工作。谢谢 –

0

好的一部分......根据你的TreeView和TreeView项的设置,你必须代码是这样的..

private void treeview_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
    {  
      TreeViewItem selectedNode = (TreeViewItem)treeview.SelectedItem; 
      var sp = selectedNode.Header as StackPanel; 
      var tb = sp.Children[0] as TextBlock; 
      var selecteditem = tb.Text; 
      //MessageBox.Show(selecteditem); 
      switch (selecteditem) 
      { 
       case "Main": 
        MessageBox.Show(selecteditem); 
        break; 
       case "First": 
        MessageBox.Show(selecteditem); 
        break; 
       default: 
        MessageBox.Show("no matching item found"); 
        break; 
      } 
     } 

这里,我正在挖掘所选树视图项目以获取所选树视图项目的文本。您可能需要稍微调整一下代码才能使其完全正常运行。让我知道你是否需要任何帮助。

+0

tb in'var selecteditem = tb.Text;'返回null。 –

+0

我现在没有我的笔记本电脑,所以无法编码,但在这里,您必须获得类型文本块的stackpanel子元素,并且它会为您制作技巧。截至目前,儿童[0]正在返回形象,因此失败了。 –