如何激活TreeViewItem?我只能使用以下代码将其选中:

treeViewItem.IsSelected = true;


我尝试这样做:

treeViewItem.Focus()


但这没用

如何使这个treeViewItem处于活动状态并被选中?

这是我的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);
       }
   }
}

最佳答案

这取决于。如何获取TreeViewItem对象,树的外观(层次结构)如何,并且如何填充树?
它是数据绑定,并且您的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并指定焦点。

关于c# - 在TreeViewItem WPF中设置SelectionActive,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8818282/

10-11 16:08