有没有一种方法可以自动展开WPF树形视图中的所有节点?我搜索了,甚至在treeview属性中也没有找到展开函数。
谢谢
<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上的优秀文章:“通过使用视图模式简化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;
}
}
}
// this loop expands all nodes
foreach (object item in myTreeView.Items)
{
TreeViewItem treeItem = (TreeViewItem)item;
if (treeItem != null)
{
ExpandAllNodes(treeItem);
treeItem.IsExpanded = true;
}
}
如果您想手动扩展,可以尝试以下方法:
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;
}
Carlo的答案更好,因为它打开了所有级别。
这比那个示例更好,代码更加简洁明了。
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);
foreach (TreeViewItem childItem in TreeItem.Items)
比你的 foreach 更短,但同样有效 :) - ShakaronTreeViewItem
。请参阅 Anvaka 在 Carlo 回答中的评论。 - user585968另一种通过编程方式操作树形项的完全展开,可能是通过C#代码,使用TreeViewItem.ExpandSubTree()
命令在根节点上。
private void ExpandFirstRootNode()
{
TreeViewControl.Items[0].ExpandSubtree();
}