2012-01-11 111 views
2

如何使TreeViewItem處於活動狀態?我可以把它只能選擇使用此代碼:在TreeViewItem中設置SelectionActive WPF

treeViewItem.IsSelected = true; 

我試着這樣做:

treeViewItem.Focus() 

但它不工作

如何使這個樹型視圖主動和選擇?

這裏是我的TreeView控件的代碼:

foreach(MyData dt in rootdata) 
{ 
    TreeViewItem root = new TreeViewItem() 
    root.IsExpanded = true; 
    root.Header = dt .DataHeader; 
    treeView.Items.Add(root); 

    foreach(AnotherData dat in parentData) 
    { 
     TreeViewItem parent = new TreeViewItem() 
     parent .IsExpanded = true; 
     parent .Header = dat .DataHeader; 
     root.Items.Add(parent);  

     foreach(AnotherData dat in childData) 
     { 
      TreeViewItem Child = new TreeViewItem() 
      Child.IsExpanded = true; 
      Child.Header = dat.DataHeader; 


      if(this treeViewItem should be selected) 
      { 
       child.IsSelected = true; 
       child.Focus(); 
      } 
      parent.Items.Add(Child); 
     } 
    } 
} 
+0

你確定你正在調用「treeViewItem.IsSelected」嗎? – Rohit 2012-01-11 11:31:25

+0

是的,我已經在Xaml中爲IsSelectionActive設置了觸發器,我可以看到這個項目是選擇還是激活。 – 2012-01-11 11:36:19

回答

1

這要看情況。你如何獲得你的TreeViewItem對象,樹如何看起來像(層次結構)以及Tree如何填充? 它是數據綁定,並且您的treeViewItem可見(不在摺疊項目內)?

這是我用來選擇和展開給定XML節點的代碼。

private void SetSelected(XmlNode node) 
{ 
    Stack<XmlNode> path = new Stack<XmlNode>(); 

    XmlDataProvider dp = FindResource("xml") as XmlDataProvider; 
    XmlNode root = dp.Document.LastChild; 

    XmlNode n1 = node; 

    //path.Push(node); 
    while (n1.ParentNode != root) 
    { 
     n1 = n1.ParentNode; 
     if (n1 == null) 
      return; 
     path.Push(n1); 
    } 
    path.Push(root); 

    ItemsControl control = tree; 
    foreach (XmlNode n in path) 
    { 

     TreeViewItem tviItem = control.ItemContainerGenerator.ContainerFromItem(n) as TreeViewItem; 
     tviItem.IsExpanded = true; 
     tviItem.UpdateLayout(); 
     control = tviItem; 
    } 

    TreeViewItem resultItem = control.ItemContainerGenerator.ContainerFromItem(node) as TreeViewItem; 
    resultItem.IsSelected = true; 
    resultItem.Focus(); 
} 

XAML:

<XmlDataProvider x:Key="xml"/> 
<TreeView ItemsSource="{Binding Source={StaticResource xml}}" x:Name=tree/> 

這段代碼的作用是先找到的路徑到根,從選擇的節點。 (如果你有TreeViewItem而不是XmlNode或其他任何對象,除了使用item.Parent而不是n1.ParentNode)

然後它從根開始,展開所有節點並更新佈局(重要)。

最後,將所選節點設置爲IsSelected = true並給定焦點。

+0

我的樹視圖被展開,我創建我的TreeViewItem是這樣的: TreeViewItem item = new TreeViewItem(); – 2012-01-11 11:34:38

+0

你如何填充樹? – AkselK 2012-01-11 14:38:47

+0

我已經在我的代碼中進行了編輯,請參閱我的treeView – 2012-01-11 15:55:02