Wpf 扩展树视图

Wpf 扩展树视图,wpf,treeview,Wpf,Treeview,我有一个TreeView控件和所有从xml填充的节点。树在第一级中有5个元素,每个元素在第二级中包含多个元素。我的requiremrnt是启动应用程序时应展开的第一个元素。我写过这样的方法: public void SelectAndExpand(ItemsControl ParentContainer) { TreeViewItem CurrentContainer = (TreeViewItem)ParentContainer.ItemContainerGenerat

我有一个
TreeView
控件和所有从xml填充的节点。树在第一级中有5个元素,每个元素在第二级中包含多个元素。我的requiremrnt是启动应用程序时应展开的第一个元素。我写过这样的方法:

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);
    }
我这样称呼这个方法:

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);
    }
但这不起作用

有没有克服这个问题的建议


谢谢

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

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

  ...
</TreeView>

...
谢谢托马斯

我可以用其他方法克服这个问题

我将加载的事件设置为

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

谢谢

另一种方法是遵循本文,将xml加载到ViewModel类中

您可以直接在codebehind中设置IsExpanded属性,而无需与TreeView交互