Visual Studio 关闭鼠标悬停时自动出现快速文档浮层的方法

就是这个烦人的图层,像打不跑的苍蝇

QQ截图20190619164332.png (上传于2019-06-22 20:40:20)
QQ截图20190619164332.png


我在上篇博客狠狠的吐槽了这个设计 https://blog.bccn.net/静夜思/66713 ,不解决掉这个问题终日寝食难安。


苍天有眼,今天让我搜到一个10年前的帖子 https://stackoverflow.com/questions/4130598/how-do-i-turn-off-code-tooltips-in-visual-studio-2010 10年前就有人受这个困扰(然而官僚化的微软始终听不到用户的声音),并且开发了一个扩展,当然这个扩展现在已经不能用了。好在给了我一个启发。


于是我开始搜vs的扩展,联机搜“tooltips”关键字的时候搜到一个叫“Tame Visual Studio Editor Tooltips”的扩展,看上去像是关于编辑器Tooltips的,仔细看了一下介绍,果然是解决这个问题的。点击download安装即可。扩展详细介绍: https://marketplace.visualstudio.com/items?itemName=KarlShifflettkdawg.TameVisualStudioEditorTooltipsAsync


然而我高兴的还是太早了。这个扩展只支持了C#语言,VB.NET根本不如作者的法眼。好在这个扩展是开源的,顺着扩展的介绍页面找到了他的github页面 https://github.com/Oceanware/Tame-Visual-Studio-Code-Editor-Tooltips (可怜目前为止只有2个star,1个fork,其中一个star是我点的,唯一的fork也是我拉了个分支,可见微软的技术在开源社区是何等的冷清),通过阅读 TameVisualStudioEditorToolTips/TameQuickInfo.cs 的代码发现没有对vb.net的支持,这是15、16、17行的代码

    [ContentType("CSharp")]
    [ContentType("XAML")]
    [ContentType("XML")]


然后克隆这个项目,加上Basic、HTML、CSS、Jscript的支持

namespace TameVisualStudioEditorToolTips {

    using System.ComponentModel.Composition;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Input;
    using Microsoft.VisualStudio.Language.Intellisense;
    using Microsoft.VisualStudio.Shell;
    using Microsoft.VisualStudio.Text;
    using Microsoft.VisualStudio.Utilities;

    [Export(typeof(IAsyncQuickInfoSourceProvider))]
    [Name("Tame Quick Info")]
    [Order(Before = "Default Quick Info Presenter")]
    [ContentType("CSharp")]
    [ContentType("Basic")]
    [ContentType("XAML")]
    [ContentType("XML")]
    [ContentType("HTML")]
    [ContentType("CSS")]
    [ContentType("JScript")]
    internal class TameQuickInfo : IAsyncQuickInfoSourceProvider {

        public IAsyncQuickInfoSource TryCreateQuickInfoSource(ITextBuffer textBuffer) {
            return textBuffer.Properties.GetorCreateSingletonProperty(() => new CancelingQuickInfoSource());
        }
    }

    internal class CancelingQuickInfoSource : IAsyncQuickInfoSource {

        public CancelingQuickInfoSource() {
        }

        public void dispose() {
        }

        public async Task<QuickInfoItem> GetQuickInfoItemAsync(IAsyncQuickInfoSession session,CancellationToken cancellationToken) {
            var isKeyDown = false;
            ThreadHelper.JoinableTaskFactory.Run(async delegate {
                // Now on the UI thread
                await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
                isKeyDown = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift) || Keyboard.IsKeyDown(Key.LeftCtrl)  || Keyboard.IsKeyDown(Key.RightCtrl);
            });

            // back on background thread
            if (!isKeyDown) {
                _ = session.dismissAsync();
            }
            return await System.Threading.Tasks.Task.Fromresult<QuickInfoItem>(null);
        }
    }
}


在visual studio里编译,安装,最后大功告成!

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...