繁体   English   中英

在TreeViewItem WPF中设置SelectionActive

[英]Set SelectionActive in TreeViewItem WPF

如何使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并给定焦点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM