VSIX - изменить настройки вкладок одного документа - PullRequest
0 голосов
/ 21 января 2019

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