我正在编写Visual Studio 2012/2013扩展,出于性能原因,缓存了所有配置值。
要实时显示“字体和颜色”中的更改,我需要知道用户更改的选项。
如果用户更改了任何选项设置,是否有通知方式?
目前我有一个解决方法,并在我的Initialize方法中使用Windows.WindowCreated
事件:
Dispatcher.CurrentDispatcher.BeginInvoke(
new Action( () => {
DTE.Events.WindowEvents.WindowCreated += WindowEvents_WindowCreated;
} ), DispatcherPriority.ApplicationIdle, null );
答案 0 :(得分:2)
您可以使用IVsTextManagerEvents.OnUserPreferencesChanged事件。有关代码示例,请参阅VS Package - Receiving Option Fonts and Color Change Events。
答案 1 :(得分:1)
您要查找的活动是IEditorFormatMap::FormatMappingChanged
。当“字体和颜色”部分中的值更改时,将触发此操作。此接口特定于特定ITextView
实例,但您可以轻松地在创建的所有ITextView
实例上聚合它。
要获得此界面,您需要导入IEditorFormatMapFactoryService
。此服务提供ITextView
- >的映射。 IEditorFormatMap
答案 2 :(得分:1)
感谢所有输入。我想我发现了一些有用的东西。我有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
包含所有更改的字体和颜色。这正是我所需要的。