[英]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.