You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio扩展开发:IWpfTextView内嵌编辑器窗格无法编辑问题求助

自定义VS编辑器可显示不可编辑问题解决方案

问题根因

你手动通过ITextEditorFactoryService创建的IWpfTextView未绑定VS的OLE命令路由适配层,VS文档窗口会优先截获所有键盘、鼠标输入走全局命令路由,缺少适配器的视图无法接收编辑类命令,因此仅能选中文本无法触发修改操作。

修复步骤

步骤1:修改编辑器工厂的视图创建逻辑

不要手动创建IWpfTextView和IWpfTextViewHost,改用IVsEditorAdaptersFactoryService创建带适配层的视图实例,自动打通命令路由,修改CreateEditorInstance中视图创建的核心代码:

// 原有创建textBuffer的逻辑保留
textBuffer = eafs.CreateVsTextBufferAdapter(_vsServiceProvider, ContentTypeRegistry.GetContentType("CUST")) as IVsTextLines;
string fileText = System.IO.File.ReadAllText(pszMkDocument);
textBuffer.InitializeContent(fileText, fileText.Length);

// 新增:创建带适配器的IVsTextView实例
var vsTextView = eafs.CreateVsTextViewAdapter(_vsServiceProvider);
vsTextView.Initialize(textBuffer, IntPtr.Zero, (uint)TextViewInitFlags.VIF_DEFAULT, null);

// 从适配器获取对应的IWpfTextView和IWpfTextViewHost
IWpfTextView dataView = eafs.GetWpfTextView(vsTextView);
IWpfTextViewHost wpfHost = eafs.GetWpfTextViewHost(vsTextView);

// 原有视图配置逻辑保留
dataView.Options.SetOptionValue(DefaultTextViewHostOptions.LineNumberMarginName, true);
dataView.Options.SetOptionValue(DefaultTextViewHostOptions.ShowCaretPositionOptionName, true);
dataView.Options.SetOptionValue(DefaultTextViewHostOptions.ChangeTrackingName, true);
dataView.Options.SetOptionValue(DefaultTextViewOptions.ViewProhibitUserInputName, false);

// 后续创建自定义窗口逻辑不变
MyCustomEditor editor = new MyCustomEditor(wpfHost);

ppunkDocData = Marshal.GetIUnknownForObject(textBuffer);
ppunkDocView = Marshal.GetIUnknownForObject(editor);
// 修正pguidCmdUI为自定义编辑器工厂的GUID
pguidCmdUI = new Guid(MyCustomEditorFactory.EditorFactoryGuidString);
retVal = VSConstants.S_OK;

步骤2:修复代码语法错误

你贴出的CreateEditorInstance方法中存在重复else的语法错误,需要删除多余的else分支,避免编译异常。

步骤3:验证自定义控件逻辑

确认MyCustomEditorControl没有拦截输入事件,不要给承载的wpfHost.HostControl设置IsEnabled=False、IsReadOnly=True等限制输入的属性。

验证效果

修改完成后重新编译扩展,打开.cust文件即可正常编辑文本,原有的classifier、quick info等扩展能力也可以正常运行,不需要手动实现IOleCommandTarget处理输入。

内容的提问来源于stack exchange,提问作者user1100269

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:36:02