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コントロールのMicrosoft既定スタイルの場所と場所
- 3. 現在の場所のメソッド
- 4. WPF MahApps.Metro - ResourceDictionariesを配置する場所
- 5. WPF NLogログを保存する場所
- 6. WPF ClickOnce - 場所情報を公開
- 7. WPF Prism - リソースを配置する場所
- 8. libclang:メソッドの場所のコレクションを取得
- 9. xml解析メソッドを入れる場所
- 10. WPFウィンドウの起動場所を変更する
- 11. 場所または場所のデータベース
- 12. 2つのクラスを扱うメソッドの場所?
- 13. タスクベースの非同期メソッドのコールバックを定義する場所
- 14. wpfに静的データを入れる場所は?
- 15. 場所
- 16. 場所
- 17. @classmethodの場所
- 18. 別の場所
- 19. ウィンドウスタートアップリソースディクショナリの場所
- 20. データベースの場所?
- 21. オクターブヘッダファイルの場所
- 22. アタッチメントファイルの場所
- 23. シミュレーションバイナリファイルの場所
- 24. コンテキストメニューの場所
- 25. アイコンコンポーザーの場所
- 26. プロパティの場所
- 27. symchkの場所
- 28. プライマリキーの場所
- 29. メソッドdrawRectを書く場所:iPhone SDKのUIViewControllerとUITableViewCell
- 30. 行、列の場所をログに記録するJavaメソッド
シンプルかつ効果的にしてみてください!ありがとう! – StinkyCat
しかし、このソリューションは要求時ではなく読み込み時に実行されます。 – Ahmad