WPFですべてのTreeViewノードを展開するにはどうすればよいですか? WinFormsには、これを行うExpandAll()メソッドがありました。WPF TreeView:ExpandAll()メソッドの場所
答えて
WPF TreeViewクラスにはExpandAllメソッドがありません。したがって、ノードをループしてIsExpandedプロパティをtrueに設定する必要があります。
これは、あなたが上に書いたものをそのようなプロパティのセッター持っている必要がありますXAMLツリービュースタイルで
<TreeView>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="True" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
を助けるかもしれない:私のサンプルIでは、このようなメソッドを記述し、Csのファイルで
をボタンを使用し、私のツリービューの名前はmyTVです:
private void ExpandAll(ItemsControl items, bool expand)
{
foreach (object obj in items.Items)
{
ItemsControl childControl = items.ItemContainerGenerator.ContainerFromItem(obj) as ItemsControl;
if (childControl != null)
{
ExpandAll(childControl, expand);
}
TreeViewItem item = childControl as TreeViewItem;
if (item != null)
item.IsExpanded = true;
}
}
private void btnExpandAll_Click(object sender, RoutedEventArgs e)
{
foreach (object item in this.myTV.Items)
{
TreeViewItem treeItem = this.myTV.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;
if (treeItem != null)
ExpandAll(treeItem, true);
treeItem.IsExpanded = true;
}
}
希望します。
user2779123のコメントに加えて、私はこれまで長いこと答えられていますが、Pierre-Olivier PignonのコードがtreeItem.IsExpanded = trueをプッシュすることをお勧めします。 nullチェックの範囲に移動するだけでなく、ツリー構造の展開と折りたたみの両方を可能にする形式で記述されているようにExpandAllプロシージャに移動することで、これにルートノードを追加します機能によって設計されています。
以下の例のように:
private void ExpandAll(ItemsControl items, bool expand)
{
items.IsExpanded = expand;
foreach (object obj in items.Items)
{
ItemsControl childControl = items.ItemContainerGenerator.ContainerFromItem(obj) as ItemsControl;
if (childControl != null)
{
ExpandAll(childControl, expand);
}
TreeViewItem item = childControl as TreeViewItem;
if (item != null)
item.IsExpanded = true;
}
}
private void btnExpandAll_Click(object sender, RoutedEventArgs e)
{
foreach (object item in this.myTV.Items)
{
TreeViewItem treeItem = this.myTV.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;
if (treeItem != null)
ExpandAll(treeItem, true);
}
}
ItemsControlには.IsExpandedはありませんが、TreeViewItemには含まれています。 – Tomas
@ピエール・オリビエが提供する答えは良いものです。
個人的には、データがどれくらい深くネストされているかわからないような状況では、再帰的ではなくスタックを使用することを好みます。さらに良いことに、それは拡張機能として提供することができる。
public static void ExpandAll(this TreeViewItem treeViewItem, bool isExpanded = true)
{
var stack = new Stack<TreeViewItem>(treeViewItem.Items.Cast<TreeViewItem>());
while(stack.Count > 0)
{
TreeViewItem item = stack.Pop();
foreach(var child in item.Items)
{
var childContainer = child as TreeViewItem;
if(childContainer == null)
{
childContainer = item.ItemContainerGenerator.ContainerFromItem(child) as TreeViewItem;
}
stack.Push(childContainer);
}
item.IsExpanded = isExpanded;
}
}
public static void CollapseAll(this TreeViewItem treeViewItem)
{
treeViewItem.ExpandAll(false);
}
/// <summary>
/// Collapse the TreeView.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _collapseTreeView_button_Click(object sender, RoutedEventArgs e)
{
_ordersParentChild_TreeView.UpdateLayout();
if (_ordersParentChild_TreeView.Items.Count > 0)
{
var rootTreeViewItem = _ordersParentChild_TreeView.Items[0] as TreeViewItem;
if (rootTreeViewItem != null)
{
rootTreeViewItem.IsExpanded = false;
}
}
}
/// <summary>
/// Expand the TreeView.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _expandTreeView_button_Click(object sender, RoutedEventArgs e)
{
_ordersParentChild_TreeView.UpdateLayout();
if(_ordersParentChild_TreeView.Items.Count > 0)
{
var rootTreeViewItem = _ordersParentChild_TreeView.Items[0] as TreeViewItem;
if (rootTreeViewItem != null)
{
rootTreeViewItem.ExpandSubtree();
}
}
}
}
動作しません... –
すると、この
private void btnExpandAll_Click(object sender, RoutedEventArgs e)
{
foreach(var item in tvES.Items)
{
var tvi = item as TreeViewItem;
if (tvi != null)
tvi.ExpandSubtree();
}
}
- 1. WPFウィンドウの場所
- 2. WPFセットアップ/デプロイメントエラーのクラス、メソッド、および行の検索場所
- 3. WPF charting toolkit凡例場所
- 4. WPFコントロールのMicrosoft既定スタイルの場所と場所
- 5. 現在の場所のメソッド
- 6. WPF NLogログを保存する場所
- 7. WPF MahApps.Metro - ResourceDictionariesを配置する場所
- 8. WPF Prism - リソースを配置する場所
- 9. WPF ClickOnce - 場所情報を公開
- 10. Javaのintern()メソッド定義の場所?
- 11. libclang:メソッドの場所のコレクションを取得
- 12. Laravel ajaxメソッドを格納する場所
- 13. xml解析メソッドを入れる場所
- 14. C#WPFの移動ウィンドウの別の場所
- 15. WPFウィンドウの起動場所を変更する
- 16. Googleの場所は、場所のID
- 17. 場所または場所のデータベース
- 18. wpfに静的データを入れる場所は?
- 19. WPFアプリケーションでオートマトンを実装する方法と場所
- 20. IntelliJ IDEAで非推奨のメソッドの代替メソッドを見つける場所?
- 21. タスクベースの非同期メソッドのコールバックを定義する場所
- 22. 2つのクラスを扱うメソッドの場所?
- 23. なぜ@ConfigurationPropertiesのメソッドの場所を非難しましたか?
- 24. WPFユニットテスト - OnstartUpメソッド
- 25. 行、列の場所をログに記録するJavaメソッド
- 26. メソッドdrawRectを書く場所:iPhone SDKのUIViewControllerとUITableViewCell
- 27. WooCommerce $ product-> get_price_htmlメソッドまたは関数の場所?
- 28. PHPのDDD - > DomainEventPublisher - > subscribeメソッドを使用する場所
- 29. Mvvmアプリケーションとビジネス層の場所
- 30. @classmethodの場所
シンプルかつ効果的にしてみてください!ありがとう! – StinkyCat
しかし、このソリューションは要求時ではなく読み込み時に実行されます。 – Ahmad