2012-01-11 95 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