如何激活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/