使用Visual Studio SDK,如何折叠一段代码?
With Visual Studio SDK, how would I collapse a section of code?
我可以通过 TextSelection 获取文本选择。
我可以突出显示特定部分。我将如何折叠所述部分,在 Visual Studio SDK 的文档中找不到任何关于折叠或隐藏部分的内容。
编辑 1
我要折叠的代码使用c++语法
编辑 2
我正在尝试编写一个允许我折叠代码的扩展,但是我似乎无法从 visual studio SDK 文档中找到有关如何调用此类选项的参考。
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);
}
}
}
}
}
}
祝你好运!
我可以通过 TextSelection 获取文本选择。 我可以突出显示特定部分。我将如何折叠所述部分,在 Visual Studio SDK 的文档中找不到任何关于折叠或隐藏部分的内容。
编辑 1 我要折叠的代码使用c++语法
编辑 2 我正在尝试编写一个允许我折叠代码的扩展,但是我似乎无法从 visual studio SDK 文档中找到有关如何调用此类选项的参考。
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);
}
}
}
}
}
}
祝你好运!