有没有办法从 WPF 中的树视图中自动展开所有节点?我搜索并没有在树视图属性中找到扩展功能。
谢谢
您可以设置 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>
如果您需要从代码中执行此操作,您可以为您的树视图项目编写视图模型,并将 IsExpanded 属性绑定到模型中的相应属性。有关更多示例,请参阅 Josh Smith 在 CodeProject 上的精彩文章:使用 ViewModel 模式简化 WPF TreeView
这就是我使用的:
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;
}
}
如果您想手动扩展,您可以尝试
xml:
<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;
}
卡罗的答案更好,因为它打开了所有级别
这通过更简洁的代码示例改进了该示例。
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);
另一种操作树项完全扩展的编程方法(可能通过 c# 代码)是TreeViewItem.ExpandSubTree()
在根节点上使用命令。
private void ExpandFirstRootNode()
{
TreeViewControl.Items[0].ExpandSubtree();
}