Visual Studio编辑器扩展选项对话框

时间:2012-07-11 13:09:28

标签: visual-studio-2010 mef visual-studio-extensions

我有一个简单的Visual Studio扩展,其构建方式与this walkthrough中提供的方式类似(使用IWpfTextViewCreationListener接口)。

扩展程序使用了我想要配置的两种颜色。

如何为此扩展程序定义选项对话框? (例如,将出现在“工具/选项”菜单中的属性页面)

我尝试使用DialogPage Class执行此操作,但显然它需要VSPackage,我不确定这种方法是否与我正在进行的操作兼容。

3 个答案:

答案 0 :(得分:2)

我认为您可以在不提供自定义OptionsPage的情况下自定义颜色。 您可以导出自己的颜色,它们将可以从工具 - 选项 - 字体和颜色

进行配置

通过您的链接示例:

[Export(typeof(EditorFormatDefinition))]
[Name("EditorFormatDefinition/MyCustomFormatDefinition")]
[UserVisible(true)]
internal class CustomFormatDefinition : EditorFormatDefinition
{
  public CustomFormatDefinition( )
  {
    this.BackgroundColor = Colors.LightPink;
    this.ForegroundColor = Colors.DarkBlue;
    this.DisplayName = "My Cusotum Editor Format";
  }
}

[Export(typeof(EditorFormatDefinition))]
[Name("EditorFormatDefinition/MyCustomFormatDefinition2")]
[UserVisible(true)]
internal class CustomFormatDefinition2 : EditorFormatDefinition
{
  public CustomFormatDefinition2( )
  {
    this.BackgroundColor = Colors.DeepPink;
    this.ForegroundColor = Colors.DarkBlue;
    this.DisplayName = "My Cusotum Editor Format 2";
  }
}

[Export(typeof(IWpfTextViewCreationListener))]
[ContentType("text")]
[TextViewRole(PredefinedTextViewRoles.Document)]
internal class TestViewCreationListener : IWpfTextViewCreationListener
{
  [Import]
  internal IEditorFormatMapService FormatMapService = null;

  public void TextViewCreated( IWpfTextView textView )
  {
    IEditorFormatMap formatMap = FormatMapService.GetEditorFormatMap(textView);

    ResourceDictionary selectedText = formatMap.GetProperties("Selected Text");
    ResourceDictionary inactiveSelectedText = formatMap.GetProperties("Inactive Selected Text");

    ResourceDictionary myCustom = formatMap.GetProperties("EditorFormatDefinition/MyCustomFormatDefinition");
    ResourceDictionary myCustom2 = formatMap.GetProperties("EditorFormatDefinition/MyCustomFormatDefinition2");

    formatMap.BeginBatchUpdate();

    selectedText[EditorFormatDefinition.BackgroundBrushId] = myCustom[EditorFormatDefinition.BackgroundBrushId];
    formatMap.SetProperties("Selected Text", selectedText);

    inactiveSelectedText[EditorFormatDefinition.BackgroundBrushId] = myCustom2[EditorFormatDefinition.BackgroundBrushId];
    formatMap.SetProperties("Inactive Selected Text", myCustom2);

    formatMap.EndBatchUpdate();
  }
}

自定义EFD可以提供SolidColorBrush es。

如果不这样做,您还可以访问VSPackages使用的服务提供商。您可以为选项页面创建一个包,并通过服务提供商使用自定义服务与编辑器扩展进行通信。

您可以像这样导入服务提供商:

[Import]
internal SVsServiceProvider serviceProvider = null;

您也无需迁移原始逻辑,只需创建其他包。

答案 1 :(得分:1)

我知道这已经过时了,但我认为其中一些链接可能对您有帮助( NB:我自己实际上并没有这样做过。)

我猜您错过了MSDN页面中详述的属性:

MSDN - Walkthrough: Creating an Options Page

[ProvideOptionPage(typeof(OptionPageGrid),
"My Category", "My Grid Page", 0, 0, true)]

其他一些选择是:

Integrating into Visual Studio Settings

Registering Custom Options Pages

答案 2 :(得分:1)

如果您决定使用VSPackage(我认为这是推荐的方法),请参阅this MSDN page和其他SO answer。我还展示了如何使用C#和选项页on my blog here的WPF用户控件执行此操作。