我的问题
我正在尝试构建 Visual Studio 的扩展,允许在每个函数的基础上而不是每个文件的基础上编辑代码。我基本上是在尝试以类似于 Microsoft Debugger Canvas 的方式显示代码.
我想知道如何在单个窗口中托管多个 Visual Studio 编辑器(我相信这些窗口正在实现 IVsWindowFrame)。我所追求的功能如下所示:
每个编辑器窗口都保留了典型的功能,并按预期与第三方扩展交互。 (例如,VsVim 在这些窗口中可以正常运行)。
我尝试过的
我花了将近两周的时间研究和尝试这些东西,但在确定要使用哪些服务、接口(interface)和类时遇到了很多麻烦。
阅读MSDN
首先,大部分 documentation讨论了如何编辑单个编辑器窗口并添加装饰、标签、边距等。它没有讨论在一个窗口 Pane 中生成多个编辑器的可能性。
我浏览了有关我感兴趣的大量接口(interface)的文档,包括 IVsTextBuffer
、IVsTextView
和 IVsInvisibleEditor
。不幸的是,我无法让其中一些界面很好地协同工作。
最重要的是,通常优秀的 MSDN 在这方面非常缺乏。许多接口(interface)只包含一个成员列表,甚至没有关于预期用途和功能的基本说明。 (例如 IComponentModel)。
许多接口(interface)都引用了一组 Editor Samples但无法在 MSDN 上读取或下载代码。显然它随 Visual Studio 2005 一起提供,但我没有这个版本的 Visual Studio,也找不到它。
与 IVsUIShell 交互
我可以访问所有使用 IVsUIShell.GetDocumentWindowEnum();
打开的 WindowFrames
我看到有一个 IVsUiShell.CreateDocumentWindow()方法,但我完全不熟悉它接受的参数,或者这是否是正确的路径。
我需要做什么
- 以编程方式创建可停靠的 Pane
- 以编程方式将编辑器添加到此 Pane 。 (并确保它们在 Visual Studio、运行文档表等中正确注册)
编辑:
对不起,我应该扩展我的步骤。当我说我需要注册正在运行的文档表和 Visual Studio 时,那是因为我想在我的自定义编辑器中实际编辑原始文档。下面是我尝试重新创建的 Debugger Canvas 中可用功能的简短示例:
http://i.imgur.com/aYm8A5E.gif (我无法嵌入 .gif)
或者:
如果有人知道我在哪里可以找到 Visual Studio 2005 附带的编辑器示例,例如 Basic Editor Sample我确定我能弄清楚这些东西。 MSDN 文档中没有关于这些接口(interface)的代码示例,这让我的工作变得异常困难。
最佳答案
Git Source Control Provider是一个开源扩展,包括一个工具 Pane ,将标准编辑器作为自定义 WPF 工具窗口中的控件嵌入。我会使用此代码作为任何 Visual Studio 2010+ 扩展的引用,我想在某些自定义位置托管编辑器窗口。
-
PendingChangesView.xaml
包括ContentControl
名为DiffEditor
, 其内容将是编辑器。 -
PendingChangesView.xaml.cs
包括一个方法ShowFile
, 它调用一个方法来创建编辑器控件并将结果分配为 DiffEditor
的内容. -
ToolWindowWithEditor.cs
包括一个方法SetDisplayedFile
返回Tuple<Control, IVsTextView>
接口(interface),提供对Control
的访问可以添加到ContentControl
以及IVsTextView
对于 TextView 。 繁重的工作在这个方法中。
请注意 SetDisplayedFile
方法包括以下形式的几行:
textViewHost.TextView.Options.SetOptionValue({name}, {value});
这些行执行 Git 源代码管理提供程序的关键功能,例如删除边距和使窗口只读。有许多选项可用,因此您需要查看 DefaultTextViewOptions
的文档和 DefaultTextViewHostOptions
应用适合您的特定扩展的那些。
关于c# - 将自定义编辑器窗口添加到 Visual Studio 窗口 Pane ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17778268/