题
有没有办法自动扩展在WPF树视图的所有节点?我搜索甚至没有发现在TreeView属性的扩展功能。
由于
解决方案
可以设置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属性绑定到相应的一个从模型。更多的例子参见大文章从约什 - 史密斯在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;
}
}
}
在为了使其工作,必须调用此方法在foreach循环为根节点:
// this loop expands all nodes
foreach (object item in myTreeView.Items)
{
TreeViewItem treeItem = (TreeViewItem)item;
if (treeItem != null)
{
ExpandAllNodes(treeItem);
treeItem.IsExpanded = true;
}
}
卡罗的答案是更好,因为它打开各级
此改进了用少量更简洁代码的例子,例如,
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);
如果你想手动扩展,你可以尝试
的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;
}
另一种的程序化的方式来操纵的树项目,通过C#代码也许完全膨胀时,根节点上使用TreeViewItem.ExpandSubTree()
命令。
private void ExpandFirstRootNode()
{
TreeViewControl.Items[0].ExpandSubtree();
}
不隶属于 StackOverflow