如何激活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);
}
}
}
答案 0 :(得分:2)
这取决于。如何获取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并且给定焦点。