我正在尝试从VSIX扩展中配置单个文档的选项卡设置,而无需触摸Visual Studio的全局设置。尽管这对于XML文档来说非常合适,但对CSharp文件不起作用。
在打开新文档后,这些设置将应用于IWpfTextView和ITextBuffer实例,但是Visual Studio仍使用全局设置。有人知道我在做什么错吗?
相关代码:
public static void ApplyDataMinerIndentationSettings(ITextBuffer textBuffer)
{
if (textBuffer.Properties.TryGetProperty(typeof(IEditorOptions), out IEditorOptions options))
{
ApplyDataMinerIndentationSettings(options);
}
}
public static void ApplyDataMinerIndentationSettings(IWpfTextView textView)
{
if (textView.Properties.TryGetProperty(typeof(IEditorOptions), out IEditorOptions options))
{
ApplyDataMinerIndentationSettings(options);
}
}
public static void ApplyDataMinerIndentationSettings(IEditorOptions options)
{
options.SetOptionValue(DefaultOptions.IndentSizeOptionId, defaultIndentSizeOption);
options.SetOptionValue(DefaultOptions.TabSizeOptionId, defaultTabSizeOption);
options.SetOptionValue(DefaultOptions.ConvertTabsToSpacesOptionId, defaultConvertTabsToSpacesOption);
options.OptionChanged += IEditorOptions_OptionChanged;
}
private static void IEditorOptions_OptionChanged(object sender, EditorOptionChangedEventArgs e)
{
IEditorOptions options = sender as IEditorOptions;
if (options != null)
{
if (e.OptionId == DefaultOptions.IndentSizeOptionId.Name)
{
if (options.GetOptionValue(DefaultOptions.IndentSizeOptionId) != defaultIndentSizeOption)
options.SetOptionValue(DefaultOptions.IndentSizeOptionId, defaultIndentSizeOption);
}
else if (e.OptionId == DefaultOptions.TabSizeOptionId.Name)
{
if (options.GetOptionValue(DefaultOptions.TabSizeOptionId) != defaultTabSizeOption)
options.SetOptionValue(DefaultOptions.TabSizeOptionId, defaultTabSizeOption);
}
else if (e.OptionId == DefaultOptions.ConvertTabsToSpacesOptionId.Name)
{
if (options.GetOptionValue(DefaultOptions.ConvertTabsToSpacesOptionId) != defaultConvertTabsToSpacesOption)
options.SetOptionValue(DefaultOptions.ConvertTabsToSpacesOptionId, defaultConvertTabsToSpacesOption);
}
}
}