VS2010扩展-代码定义窗口

发布于 2025-01-03 20:43:57 字数 136 浏览 0 评论 0原文

我正在从 IWpfTextViewCreationListener 接口监听 TextViewCreated 。

如何使用作为参数获得的 IWpfTextView 来区分属于“代码定义窗口”的文本视图和普通文本编辑器?

谢谢!

I am listening on TextViewCreated from IWpfTextViewCreationListener interface.

How can I use the IWpfTextView I get as a parameter to differentiate between textview belonging to the "code definition window" and the normal text editor?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾听心声的旋律 2025-01-10 20:43:57

这是完成此操作的基本代码。

static bool IsCodeDefWindow(
    IWpfTextView textView, 
    IVsEditorAdaptersFactoryService editorAdaptersFactoryService, 
    IVsCodeDefView vsCodeDefView)
{
    var vsTextView = editorAdaptersFactoryService.GetViewAdapter(textView);
    if (vsTextView == null)
    {
        // Happens for unshimmed IWpfTextView instances
        return false;
    }

    int isCodeDef;
    return
        ErrorHandler.Succeeded(vsCodeDefView.IsCodeDefView(vsTextView, out isCodeDef)) &&
        isCodeDef != 0;
}

IVsEditorAdaptersFactoryService 是一个 MEF 可导入组件,因此可以通过 MEF 容器上的 [Import] 获取它。

IVsCodeDefView 是一项较旧的 Visual Studio 服务。如果您有 IServiceProvider,则可以通过 QueryService 使用它(请务必使用 SVsServiceProvider 作为服务类型,并使用 IVsServiceProvider 作为接口)。

Here is the basic code to accomplish this.

static bool IsCodeDefWindow(
    IWpfTextView textView, 
    IVsEditorAdaptersFactoryService editorAdaptersFactoryService, 
    IVsCodeDefView vsCodeDefView)
{
    var vsTextView = editorAdaptersFactoryService.GetViewAdapter(textView);
    if (vsTextView == null)
    {
        // Happens for unshimmed IWpfTextView instances
        return false;
    }

    int isCodeDef;
    return
        ErrorHandler.Succeeded(vsCodeDefView.IsCodeDefView(vsTextView, out isCodeDef)) &&
        isCodeDef != 0;
}

The IVsEditorAdaptersFactoryService is a MEF importable component so it's available via [Import] on your MEF container.

The IVsCodeDefView is an older Visual Studio service. If you have an IServiceProvider it's available via QueryService (be sure to use SVsServiceProvider as the service type and IVsServiceProvider as the interface).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文