扩展TreeView

时间:2009-09-07 06:40:16

标签: wpf treeview

我有一个TreeView控件,所有节点都是从xml填充的。树在第一级有5个元素,每个元素包含2级中的几个元素。在我的应用程序启动时,我的reQirmrnt只是第一个元素应该是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);
    }

但这不起作用......

任何克服此问题的建议

由于

3 个答案:

答案 0 :(得分:1)

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

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

  ...
</TreeView>

答案 1 :(得分:1)

谢谢托马斯

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

我将Loaded事件设置为

Loaded="MyTree_Loaded"

我handeld as

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();                
        }            
    }

由于

答案 2 :(得分:0)

另一种方法是遵循本文Simplifying the WPF TreeView by Using the ViewModel Pattern,并将xml加载到ViewModel类。

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