有没有办法在WPF中自动展开树视图中的所有节点?我搜索了,甚至没有在treeview属性中找到扩展函数。
由于
答案 0 :(得分:66)
您可以设置ItemContainerStyle并使用IsExpanded属性。
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<TreeView>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="True"/>
</Style>
</TreeView.ItemContainerStyle>
<TreeViewItem Header="Header 1">
<TreeViewItem Header="Sub Item 1"/>
</TreeViewItem>
<TreeViewItem Header="Header 2">
<TreeViewItem Header="Sub Item 2"/>
</TreeViewItem>
</TreeView>
</Grid>
</Page>
如果需要从代码执行此操作,可以为树视图项编写viewmodel,并将IsExpanded属性绑定到模型中的相应属性。有关更多示例,请参阅Josh Smith关于CodeProject的精彩文章:Simplifying the WPF TreeView by Using the ViewModel Pattern
答案 1 :(得分:5)
这就是我使用的:
private void ExpandAllNodes(TreeViewItem rootItem)
{
foreach (object item in rootItem.Items)
{
TreeViewItem treeItem = (TreeViewItem)item;
if (treeItem != null)
{
ExpandAllNodes(treeItem);
treeItem.IsExpanded = true;
}
}
}
为了使它工作,您必须在根节点的foreach循环中调用此方法:
// this loop expands all nodes
foreach (object item in myTreeView.Items)
{
TreeViewItem treeItem = (TreeViewItem)item;
if (treeItem != null)
{
ExpandAllNodes(treeItem);
treeItem.IsExpanded = true;
}
}
答案 2 :(得分:2)
卡罗的答案更好,因为它打开了所有级别
通过更简洁的代码示例改进了该示例。
private void ExpandAllNodes(TreeViewItem treeItem)
{
treeItem.IsExpanded = true;
foreach (var childItem in treeItem.Items.OfType<TreeViewItem>())
{
ExpandAllNodes(childItem);
}
}
使用此行代码
进行调用TreeViewInstance.Items.OfType<TreeViewItem>().ToList().ForEach(ExpandAllNodes);
答案 3 :(得分:2)
如果您想手动展开,可以尝试
的Xaml:
<TreeView x:Name="TreePeople">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="True" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
C#:
bool Expanded = false;
// The event subscription method (for a button click)
private void ButtonExpand__Click(object sender, RoutedEventArgs e)
{
Expanded = !Expanded;
Style Style = new Style
{
TargetType = typeof(TreeViewItem)
};
Style.Setters.Add(new Setter(TreeViewItem.IsExpandedProperty, Expanded));
TreePeople.ItemContainerStyle = Style;
}
答案 4 :(得分:0)
另一种可能完全通过c#代码进行树项扩展的编程方式是在根节点上使用TreeViewItem.ExpandSubTree()
命令。
private void ExpandFirstRootNode()
{
TreeViewControl.Items[0].ExpandSubtree();
}