让Visual Studio自定义编辑器响应键输入

时间:2016-10-27 07:54:19

标签: c# visual-studio visual-studio-extensions vssdk

我正在开发一个项目,我需要创建自定义编辑器并使用投影缓冲区来自定义代码文件,我已经设法通过完成本文中的步骤来创建代码窗口  https://joshvarty.wordpress.com/2014/08/01/ripping-the-visual-studio-editor-apart-with-projection-buffers/

code window image

但是,我无法通过拖放工作来获取代码窗口以响应任何键输入

该扩展是为visual studio 2015编写的,是否需要处理以使代码窗口工作的任何额外步骤?

这是我使用的代码:

 public IWpfTextViewHost CreateEditor(string filePath, int start = 0, int end = 0, bool createProjectedEditor = false)
    {
        //IVsInvisibleEditors are in-memory represenations of typical Visual Studio editors.
        //Language services, highlighting and error squiggles are hooked up to these editors
        //for us once we convert them to WpfTextViews. 
        var invisibleEditor = GetInvisibleEditor(filePath);

        var docDataPointer = IntPtr.Zero;
        Guid guidIVsTextLines = typeof(IVsTextLines).GUID;

        ErrorHandler.ThrowOnFailure(invisibleEditor.GetDocData(
            fEnsureWritable: 1
            , riid: ref guidIVsTextLines
            , ppDocData: out docDataPointer));

        IVsTextLines docData = (IVsTextLines)Marshal.GetObjectForIUnknown(docDataPointer);

        //Create a code window adapter
        var codeWindow = _editorAdapter.CreateVsCodeWindowAdapter(VisualStudioServices.OLEServiceProvider);
        ErrorHandler.ThrowOnFailure(codeWindow.SetBuffer(docData));

        //Get a text view for our editor which we will then use to get the WPF control for that editor.
        IVsTextView textView;
        ErrorHandler.ThrowOnFailure(codeWindow.GetPrimaryView(out textView));

        _currentlyFocusedTextView = textView;


        RegisterDocument(filePath);


        var textViewHost = _editorAdapter.GetWpfTextViewHost(textView);

        return textViewHost;
    }

0 个答案:

没有答案