Silverlight TreeView展开顶部节点下的所有节点

时间:2013-10-30 16:02:52

标签: c# silverlight treeview silverlight-5.0

我正在使用Silverlight TreeView。控件加载时,所有节点都关闭。当我单击其中一个节点时,所有所需的节点将在该打开的父节点下展开。我该怎么做呢?我使用TreeView的经验非常有限,因此示例代码确实会有很多帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

将处理程序附加到每个TreeViewItem的Expanded事件。然后,遍历子树,随时扩展每个节点。

简单的XAML:

        <sdk:TreeView>
        <sdk:TreeViewItem Expanded="TreeViewItem_OnExpanded" Header="One"></sdk:TreeViewItem>
        <sdk:TreeViewItem Expanded="TreeViewItem_OnExpanded" Header="Two">
            <sdk:TreeViewItem Expanded="TreeViewItem_OnExpanded" Header="Three">
                <sdk:TreeViewItem Expanded="TreeViewItem_OnExpanded" Header="Four">
                    <sdk:TreeViewItem Expanded="TreeViewItem_OnExpanded" Header="Five" />
                </sdk:TreeViewItem>
            </sdk:TreeViewItem>
        </sdk:TreeViewItem>
    </sdk:TreeView>

代码背后:

    private void TreeViewItem_OnExpanded(object sender, RoutedEventArgs e)
    {
        TreeViewItem tvi = sender as TreeViewItem;
        Debug.Assert(tvi != null);

        if (tvi.HasItems) { ExpandChildren(tvi); }
    }

    private void ExpandChildren(TreeViewItem tvi)
    {
        foreach (var item in tvi.Items)
        {
            if (item is TreeViewItem) { ExpandChildren(item as TreeViewItem); }
        }
        tvi.IsExpanded = true;
    }

然而,我不知道如何在TreeView.ItemTemplate中设置事件处理程序 也许另一位读者知道如何做到这一点......?