【问题标题】:Expanded TreeView展开的树视图
【发布时间】:2012-01-10 23:08:53
【问题描述】:

我有一个TreeView 控件,所有节点都是从 xml 填充的。树在第一级有 5 个元素,每个元素在第二级包含几个元素。我的要求是我的应用程序启动时只有第一个元素应该是 Expanded。我写的方法是这样的:

public void SelectAndExpand(ItemsControl ParentContainer)
    {
        TreeViewItem CurrentContainer = (TreeViewItem)ParentContainer.ItemContainerGenerator.ContainerFromIndex(0);
        if (CurrentContainer == null)
        {
            return;
        }
        CurrentContainer.IsExpanded = true;
        CurrentContainer.UpdateLayout();

        TreeViewItem ChildItem = (TreeViewItem)CurrentContainer.ItemContainerGenerator.ContainerFromIndex(0);
        if (ChildItem != null)
        {
            ChildItem.IsSelected = true;
            CurrentContainer.UpdateLayout();
        }
    }

我这样称呼这个方法:

public Window1()
    {            
        InitializeComponent();
        SelectAndExpand(MyTree);
    }

但这不起作用...

任何解决此问题的建议

谢谢

【问题讨论】:

    标签: wpf treeview


    【解决方案1】:

    您可以定义ItemContainerStyle 以便展开项目:

    <TreeView>
      <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
          <Setter Property="IsExpanded" Value="True"/>
        </Style>
      </TreeView.ItemContainerStyle>
    
      ...
    </TreeView>
    

    【讨论】:

      【解决方案2】:

      谢谢托马斯

      我可以通过其他方式克服这个问题......

      我将 Loaded 事件设置为

      Loaded="MyTree_Loaded"
      

      我认为

      private void MyTree_Loaded(object sender, RoutedEventArgs e)
          {
              TreeViewItem CurrentContainer = (TreeViewItem)MyTree.ItemContainerGenerator.ContainerFromIndex(0);
              if (CurrentContainer == null)
              {
                  return;
              }
              CurrentContainer.IsExpanded = true;
              CurrentContainer.UpdateLayout();
      
              TreeViewItem ChildItem = (TreeViewItem)CurrentContainer.ItemContainerGenerator.ContainerFromIndex(0);
              if (ChildItem != null)
              {
                  ChildItem.IsSelected = true;
                  CurrentContainer.UpdateLayout();                
              }            
          }
      

      谢谢

      【讨论】:

        【解决方案3】:

        另一种方法是按照这篇文章Simplifying the WPF TreeView by Using the ViewModel Pattern,将xml加载到ViewModel类中。

        您可以直接在代码隐藏中设置 IsExpanded 属性,而无需与 TreeView 交互。

        【讨论】:

          猜你喜欢
          • 2016-07-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-02
          • 2021-01-28
          • 2012-01-19
          • 2017-11-24
          • 2010-12-15
          相关资源
          最近更新 更多