【问题标题】:Set SelectionActive in TreeViewItem WPF在 TreeViewItem WPF 中设置 SelectionActive
【发布时间】:2012-02-07 18:00:46
【问题描述】:

如何激活 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.IsSelected”的电话吗?
  • 是的,我已经在 Xaml 中为 IsSelectionActive 设置了触发器,我可以查看该项目是被选中还是处于活动状态。

标签: c# .net wpf treeview treeviewitem


【解决方案1】:

这取决于。你如何获得你的 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 并赋予焦点。

【讨论】:

  • 我的 treeView 已展开,我像这样创建我的 TreeViewItem:TreeViewItem item = new TreeViewItem();
  • 如何填充树?
猜你喜欢
  • 2013-08-26
  • 2016-08-23
  • 2021-12-22
  • 2018-04-27
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
  • 2012-05-31
  • 2020-01-08
相关资源
最近更新 更多