我构建了一个VSPackage,用于投射IVsInvisibleEditor
的文本。此IVsInvisibledEditor
对应于用户在Visual Studio中打开并存在于Document Window内的文件。
当用户关闭此文档窗口时,它会从基础ITextBuffer
中删除许多属性。特别是它会从源ITextDocument
中删除ITextBuffer
属性。
我想阻止这种情况,因为用户可能正在使用我的扩展程序继续编辑文档。关闭主文档编辑器后,删除这些属性可防止在我的自定义编辑器中识别击键。
如何检测Visual Studio何时关闭文档窗口?我已经探索了EnvDTE类,我注意到DocumentEvents类,但它被标记为Microsoft-internal。
是否有公共API可以检测文档窗口何时关闭?
答案 0 :(得分:2)
了解文档窗口何时关闭的一种有效方法是使用EnvDTE WindowEvents
WindowEvents _windowEvents;
// EnvDTE.Window _editorWindow=null;
_windowEvents = _vsObject.Events.get_WindowEvents(_editorWindow);
_windowEvents.WindowClosing += OnWindowClosing;
void OnWindowClosing(Window Window)
{
/// your stuff here
}
另一种选择是通过IVsWindowFrameNotify..IVsWindowFrameNotify3接口
如果您对文档IVsWindowFrame有有效引用,则可以使用Advise方法接收所有与帧相关的事件。
_iVsWindowFrame.Advise(hostWindowFrameNotify, out hostWindowFrameNotify_cookie);
请记住调用IVsWindowFrame.Unadvise清理钩子。