【问题标题】:VSIX (Visual Studio Extension) "Fonts and Colors" changed eventVSIX(Visual Studio 扩展)“字体和颜色”更改事件
【发布时间】:2013-12-04 13:11:42
【问题描述】:

我正在编写 Visual Studio 2012/2013 扩展,出于性能原因,所有配置值都被缓存。

要实时更改“字体和颜色”,我需要知道用户何时更改了选项。

是否有办法在用户更改任何选项设置时收到通知?

目前我有一个解决方法并在我的 Initialize 方法中使用 Windows.WindowCreated 事件:

Dispatcher.CurrentDispatcher.BeginInvoke(
    new Action( () => {
        DTE.Events.WindowEvents.WindowCreated += WindowEvents_WindowCreated;
    } ), DispatcherPriority.ApplicationIdle, null );

【问题讨论】:

    标签: c# visual-studio-2012 visual-studio-2013 visual-studio-extensions vsix


    【解决方案1】:

    【讨论】:

    • +1,我亲自使用它来实现 OP 正在寻找的东西。请注意,当主题更改且颜色设置为“自动”时,使用 NOAUTOCOLORS 选项从字体和颜色存储服务获取给定颜色仍然存在错误(在 VS 2013 中) - 解决方法(有效!)请参阅 Josh 在forum thread on this issue 中的回答
    • 我现在在 VS2015 和 2017 上再次遇到这个问题......难以置信。
    【解决方案2】:

    您要查找的事件是IEditorFormatMap::FormatMappingChanged。这将在“字体和颜色”部分中的值更改时触发。此接口特定于特定的ITextView 实例,但您可以轻松地将它聚合到所有创建的ITextView 实例上。

    要获得此接口,您需要导入IEditorFormatMapFactoryService。该服务提供从ITextView -> IEditorFormatMap 的映射

    【讨论】:

    • 这是我使用 Visual Studio 扩展的第一步。一个完整的代码示例将非常有用。
    • @Flynn 不幸的是,完整的代码示例远远超出了我在堆栈溢出答案中所能容纳的范围。 VS 扩展样本往往是这样的。但是,您可以从查看以下链接开始。这两个文件合力查看我提到的确切事件。 github.com/jaredpar/VsVim/blob/master/Src/VimWpf/Implementation/…github.com/jaredpar/VsVim/blob/master/Src/VimWpf/Implementation/…
    • '一个完整的代码示例'可能是错误的措辞。我只需要基本结构(可能使用 MEF)即可参加此活动。要访问我使用的 WindowCreated 事件:DTE.Events.WindowEvents.WindowCreated += WindowEvents_WindowCreated; 是否有类似的东西可以访问 Preferences Changed 事件?
    • 再次感谢,您的回答给了我足够的信息来找到正确的答案。
    【解决方案3】:

    感谢所有输入。我想我发现了一些有用的东西。我有一个IWpfTextViewCreationListener。我添加了以下代码行:

    [Import]
    public IEditorFormatMapService FormatMapService = null; // MEF
    
    public void TextViewCreated( IWpfTextView textView ) {
        IEditorFormatMap editorFormatMap = FormatMapService.GetEditorFormatMap( textView );
        editorFormatMap.FormatMappingChanged += FormatMapChanged;
    }
    
    void FormatMapChanged( object sender, FormatItemsEventArgs e ) {
        /* do something */
    }
    

    FormatItemsEventArgs 包含所有更改的字体和颜色。这正是我所需要的。

    【讨论】:

    • public void TextViewCreated( IWpfTextView textView ) 谁叫它??你是如何得到你需要的文本视图的?为什么很难找到一个这样的工作示例! MS 文档是最差的可用文档之一,用户内容几乎不存在!有人怎么想出这些东西???
    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 2016-10-04
    • 1970-01-01
    • 2014-05-04
    • 2013-09-25
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多