为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查我的 VS 2017 扩展中的工具窗口是否隐藏

如何检查我的 VS 2017 扩展中的工具窗口是否隐藏

C#
白猪掌柜的 2022-11-21 20:40:17
我正在为 Visual Studio 2017 开发一个扩展,其中包含自定义“toolwindow”。此“工具窗口”包含WPF control订阅view model了Workspace.WorkspaceChanged和EnvDTE.DTE.Events.WindowEvents.WindowActivated事件。我知道当用户关闭“toolwindow”时,它实际上并没有被破坏,而是“隐藏”了。但是,它仍然对我的事件做出反应。所以,我想知道两个问题的答案:如何检查工具窗口是否被隐藏?我可以“关闭”工具窗口以便将其销毁吗?编辑:创建工具窗口的代码:protected virtual TWindow OpenToolWindow(){        ThreadHelper.ThrowIfNotOnUIThread();        // Get the instance number 0 of this tool window. This window is single instance so this instance        // is actually the only one.        // The last flag is set to true so that if the tool window does not exists it will be created.        ToolWindowPane window = Package.FindToolWindow(typeof(TWindow), id: 0, create: true);        if (window?.Frame == null)        {            throw new NotSupportedException("Cannot create tool window");        }        IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;        Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show());        return window as TWindow;}
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

要检测工具窗口何时关闭,您可以从IVsWindowFrameNotify3继承它并在 OnShow 方法中检查 fShow == (int) __FRAMESHOW.FRAMESHOW_WinClosed



查看完整回答
反对 回复 2022-11-21
?
函数式编程

TA贡献1807条经验 获得超9个赞

只是为了添加到@Sergey Vlasov 的回答 - 我发现了第二种方法,如果窗口被隐藏/显示,则会收到通知。这是我的 WPF 控件视图模型中的代码。


EnvDTE.DTE dte = MyVSPackage.Instance.GetService<EnvDTE.DTE>();


// _visibilityEvents is a private field. 

// There is a recommendation to store VS events objects in a field 

// to prevent them from being GCed

_visibilityEvents = (dte?.Events as EnvDTE80.Events2)?.WindowVisibilityEvents;


if (_visibilityEvents != null)

{

    _visibilityEvents.WindowShowing += VisibilityEvents_WindowShowing;

    _visibilityEvents.WindowHiding += VisibilityEvents_WindowHiding;

}



查看完整回答
反对 回复 2022-11-21
  • 2 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信