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>
コードからこれを行う必要がある場合は、ツリービューアイテムのviewmodelを記述し、IsExpandedプロパティをモデルの対応するプロパティにバインドできます。その他の例については、CodeProjectに関するJosh Smithのすばらしい記事を参照してください。 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;
}
}
手動で展開したい場合は、試すことができます
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);
おそらくc#コードを介してツリー項目の完全な展開を操作する別のプログラムによる方法は、ルートノードでTreeViewItem.ExpandSubTree()
コマンドを使用することです。
private void ExpandFirstRootNode()
{
TreeViewControl.Items[0].ExpandSubtree();
}