有没有办法以编程方式在Solution Explorer中隐藏项目?

时间:2012-03-30 13:43:43

标签: c# .net visual-studio-2010 visual-studio-sdk

我正在研究Visual Studio 2010的扩展,我试图弄清楚如何在解决方案资源管理器(UIHierarchy)中隐藏项目,而不是从底层解决方案中删除它。我一直在寻找,并找到了一些线索,但我只是不知道把它们放在一起。

从我能够收集到的内容来看,Visual Studio甚至不创建UIHierarchy实例,除非该项是可见的(即树已经扩展到它),所以我想如果我想要一个要消失的项目,我应该可以简单地从树中删除该实例。

我的第一个问题是,我的假设是否正确?

假设答案是肯定的,那么我有以下代码(本文简化):

private void HideProject(IVsHierarchy project)
{
    ((IVsUIHierarchyWindow2)_uiHierarchyWindow).RemoveUIHierarchy(GetUIHierarchyFromHierarchy(project));
}

private IVsUIHierarchy GetUIHierarchyFromHierarchy(IVsHierarchy project)
{
    UIHierarchy solutionExplorer = ((DTE2)_dte).ToolWindows.SolutionExplorer;
    foreach (UIHierarchyItem hierarchy in solutionExplorer.UIHierarchyItems.Item(1).UIHierarchyItems)
    {
        // What do I do here?
    }
    return null;
}

显然,这还没有做任何事情,因为我完全陷入困境。我怀疑代码必须变为递归(处理文件夹中包含的项目等),但是现在,我只关心所有项目都直接包含在解决方案下面的简单情况。

有没有人知道比微软(恕我直言不足)文件更好的参考资料?有没有人试过这样做呢?我该怎么做?

谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定项目节点是否可行。对于文件节点,存在VSHPROPID_IsNonMemberItem层次结构属性。请查看this threadthis one