1UIHierarchyParent节点对象的父节点SelectedItems当前节点选中的子节点集合UIHierarchyItems当前节点的子节点集合DoDefaultAction()对节点进行默认操作类似于进行双击或按下回车键GetItem()按指定路径返回一个子节点SelectDown()选中当前选中节点的下个节点SelectUp()选中当前选中节点的上个节点更多信息请参看MSDN。2UIHierarchyItems集合Expanded获取或设置所表示的节点是否已展开Parent节点集合的父节点Item()返回集合中的一项更多信息请参看MSDN。3UIHierarchyItemIsSelected获取节点是否被选中Name节点对象的名称Select()选中节点更多信息请参看MSDN。有了这些知识我们现在有能力去探索对解决方案管理器的操作了。CollapseAllProjects示例项目刚开始的时候项目的数量也许还不太多随着程序规模的增大项目数量也会不断增加这时要找到某个项目或者某个文件就变得越来越麻烦你得先把大量的项目折叠起来。如果有一个命令可以快速地折叠起所有项目就方便多了这里的思路很简单只要找到所有的项目节点依次查看每个项目如果项目展开了就把它折叠起来。0添加命令之前我们曾添加过CloseAllDocuments和NPetshopSlnGenerator命令见可扩展性开发四、五它们分别加在文本编辑器的标签和Tools菜单上这里的过程没什么不同C# Code - 添加CollapseAllProjects命令OnConnection(){// Get Solution Explorer command barCommandBar slnCommandBar GetCommandBarByName(Solution);// Add a new commandAddNamedCommand2(slnCommandBar, COLLAPSE_ALL_PROJECTS_COMMAND_NAME,Collapse All Projects, Collapse All Projects, false, 0, slnCommandBar.Controls.Count 1);}QueryStatus(){else if (commandName GetCommandFullName(COLLAPSE_ALL_PROJECTS_COMMAND_NAME)){status (vsCommandStatus)vsCommandStatus.vsCommandStatusSupported | vsCommandStatus.vsCommandStatusEnabled;return;}}Exec(){else if (commandName GetCommandFullName(COLLAPSE_ALL_PROJECTS_COMMAND_NAME)){CollapseAllProjects();handled true;return;}}这里通过“Solution”找到解决方案节点的上下文菜单。1找到所有项目节点C# Code - 查找所有的项目节点也许比预想的要复杂些主要的原因是解决方案文件夹的存在解决方案文件夹本身也被看作Project对象同时它又可以包含其它真正的项目所以在查找项目的时候要分两种情况。先查找解决方案下面的项目然后再查找解决方案文件夹下面的项目。2折叠所有项目节点C# Code - 折叠所有项目节点private void CollapseAllProjects(){Solution sln _applicationObject.Solution;ListUIHierarchyItem projects GetProjectNodes(sln);foreach (UIHierarchyItem item in projects){CollapseProject(item);}}private void CollapseProject(UIHierarchyItem project){if (project.UIHierarchyItems.Expanded){if (IsDirectProjectNode(project)){project.UIHierarchyItems.Expanded false;}else if (IsProjectNodeInSolutionFolder(project)){project.Select(vsUISelectionType.vsUISelectionTypeSelect);SolutionExplorerNode.DoDefaultAction();}}}这里就简单了对于每个项目通过Expanded属性判断它是否已展开如果是的话将其折叠起来此时也要分两种情况进行考虑。以后就不用再为那些包含数十个项目的解决方案发愁了:)可以从这里下载代码也可以在这里下载可运行的Add-In解压缩后将文件放在[My Documents Path]\Visual Studio 2008\Addins下。