VSIX-更改单个文档的选项卡设置

时间:2019-01-21 10:11:54

标签: visual-studio-extensions vsix

我正在尝试从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);
            } 
        }
    }

0 个答案:

没有答案