Я пытаюсь настроить параметры вкладок отдельного документа из расширения 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);
}
}
}