使用Visual Studio SDK,如何折叠一段代码?

时间:2018-07-23 15:41:52

标签: c# visual-studio-2015 visual-studio-sdk

我可以通过TextSelection选择文本。 我可以突出显示特定部分。我将如何折叠该部分,在Visual Studio SDK文档中找不到有关折叠或隐藏该部分的任何内容。

编辑1 我要折叠的代码使用c ++语法

编辑2 我正在尝试编写一个允许我折叠代码的扩展,但是似乎找不到从Visual Studio SDK文档中引用如何调用此选项的参考。

1 个答案:

答案 0 :(得分:2)

IOutliningManager可能就是您想要的。

它提供了允许您获取所有可折叠区域,折叠区域的方法,以及允许您扩展或折叠给定区域的方法。

作为示例,您可能会发现this有用。尽管OP的代码存在问题,但无法通过链接线程解决,但提供的代码段可能会让您朝正确的方向前进。我已包含以下代码段:

[Microsoft.VisualStudio.Utilities.ContentType("text")]
[Microsoft.VisualStudio.Text.Editor.TextViewRole(Microsoft.VisualStudio.Text.Editor.PredefinedTextViewRoles.Editable)]
[Export(typeof(IVsTextViewCreationListener))]
public class Main : IVsTextViewCreationListener
{
    private IOutliningManager _outliningManager;
    private IVsEditorAdaptersFactoryService _editorAdaptersFactoryService;

    public void VsTextViewCreated(IVsTextView textViewAdapter)
    {

        IComponentModel componentModel = (IComponentModel)ServiceProvider.GlobalProvider.GetService(typeof(SComponentModel));
        if (componentModel != null)
        {
            IOutliningManagerService outliningManagerService = componentModel.GetService<IOutliningManagerService>();
            _editorAdaptersFactoryService = componentModel.GetService<IVsEditorAdaptersFactoryService>();

            if (outliningManagerService != null)
            {
                if (textViewAdapter != null && _editorAdaptersFactoryService != null)
                {
                    var textView = _editorAdaptersFactoryService.GetWpfTextView(textViewAdapter);
                    var snapshot = textView.TextSnapshot;
                    var snapshotSpan = new Microsoft.VisualStudio.Text.SnapshotSpan(snapshot, new Microsoft.VisualStudio.Text.Span(0, snapshot.Length));
                    _outliningManager = outliningManagerService.GetOutliningManager(textView);
                    var regions = _outliningManager.GetAllRegions(snapshotSpan);
                    foreach (var reg in regions)
                    {
                        _outliningManager.TryCollapse(reg);
                    }
                }
            }
        }
    }
}

祝你好运!