2017-06-09 76 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]正在返回形象,因此失敗了。 –