Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VSIX(Visual Studio扩展)";字体和颜色“;变更事件_C#_Visual Studio 2012_Visual Studio 2013_Visual Studio Extensions_Vsix - Fatal编程技术网

C# VSIX(Visual Studio扩展)";字体和颜色“;变更事件

C# VSIX(Visual Studio扩展)";字体和颜色“;变更事件,c#,visual-studio-2012,visual-studio-2013,visual-studio-extensions,vsix,C#,Visual Studio 2012,Visual Studio 2013,Visual Studio Extensions,Vsix,我正在编写Visual Studio 2012/2013扩展,出于性能原因,所有配置值都被缓存 要使“字体和颜色”的更改实时可见,我需要知道用户何时更改了选项 如果用户更改了任何选项设置,是否有方法通知用户 目前,我有一个解决方法,在初始化方法中使用Windows.WindowCreated事件: Dispatcher.CurrentDispatcher.BeginInvoke( new Action( () => { DTE.Events.WindowEvents

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

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

如果用户更改了任何选项设置,是否有方法通知用户

目前,我有一个解决方法,在初始化方法中使用
Windows.WindowCreated
事件:

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

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


要获得此接口,您需要导入
IEditorFormatMapFactoryService
。此服务提供了一个来自
ITextView
->
IEditorFormatMap

的映射,您可以使用该事件。有关代码示例,请参阅。

感谢您的所有输入。我想我找到了一些有用的东西。我有一个
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
包含所有更改的字体和颜色。这正是我所需要的。

这是我使用Visual Studio扩展的第一步。完整的代码示例将非常有用。@Flynn不幸的是,完整的代码示例远远超出了堆栈溢出答案的范围。VS扩展示例往往是这样的。但是,您可以从以下链接开始。这两份文件合二为一是为了看我提到的确切事件。”“完整的代码示例”可能是错误的措辞。我只需要基本的结构(可能使用MEF)就可以到达这个事件。要访问我使用的WindowCreated事件:
DTE.Events.WindowEvents.WindowCreated+=WindowEvents\u WindowCreated
是否有类似的内容可以进入Preferences Changed事件?再次感谢,您的回答为我提供了足够的信息,让我找到正确的答案。+1,我个人已经使用了这一点来实现OP所要的目标。请注意,当主题更改且颜色设置为“自动”时,使用NOAUTOCOLORS选项从字体和颜色存储服务获取给定颜色仍然存在错误(在VS 2013中)。要解决此问题(有效!),请参见Josh在《我现在在VS2015和2017》中的回答。。。难以置信。公共无效文本视图创建(IWPTextView文本视图)谁叫它??您是如何获得所需的文本视图的??为什么要找到一个这样的工作示例如此困难!!MS文档是最差的可用文档之一,用户内容几乎不存在!有人怎么知道这件事的???