Диалоговое окно параметров расширения редактора Visual Studio

У меня есть простое расширение Visual Studio, построенное аналогично представленному в . это пошаговое руководство (с использованием IWpfTextViewCreationListener интерфейс).

Расширение использует два цвета, которые я хотел бы настроить.

Как определить диалоговое окно параметров для этого расширения? (например, страница свойств, которая появится в меню Инструменты/Параметры)

Я попытался сделать это с помощью DialogPage Class, но, по-видимому, для этого требуется VSPackage, и я не уверен, совместим ли этот подход с тем, что я делаю.


person Cristian Lupascu    schedule 11.07.2012    source источник
comment
Что вы имеете в виду под VSPackage? Вы используете надстройки? Имейте в виду, что начиная с VS2013 будут поддерживаться только расширения Vsix!   -  person Kendar    schedule 12.12.2013
comment
@EDR от VSPackage Я имею в виду это. Это расширение VS, код которого up on codeplex. Я думал о добавлении диалогового окна конфигурации, чтобы можно было настраивать цвета.   -  person Cristian Lupascu    schedule 13.12.2013


Ответы (3)


Я думаю, вы можете сделать свои цвета настраиваемыми, не предоставляя пользовательскую страницу 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 могут предоставить SolidColorBrushes.

Если этого недостаточно, вы также можете получить доступ к поставщику услуг, используемому VSPackages. Вы можете создать пакет для страницы параметров и обмениваться данными с расширением редактора через поставщика услуг с помощью специальной службы.

Вы можете импортировать поставщика услуг следующим образом:

[Import]
internal SVsServiceProvider serviceProvider = null;

Это решение также не требует от вас переноса исходной логики, только создание дополнительного пакета.

person Ursegor    schedule 06.01.2014

Я знаю, что это устарело, но я подумал, что некоторые из этих ссылок могут вам помочь (NB: я сам этого не делал).

Я предполагаю, что вам не хватает атрибутов, подробно описанных на странице MSDN:

MSDN — пошаговое руководство: создание страницы параметров

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

Некоторые другие варианты:

Интеграция в настройки Visual Studio

Регистрация страниц пользовательских параметров

person Obsidian Phoenix    schedule 19.12.2013
comment
Благодарность! На самом деле я посещал эти страницы, когда хотел реализовать эту функцию, но все они вращались вокруг использования класса DialogPage, который, казалось, нельзя было использовать, если я не создал VSPackage, который, по-видимому, был несовместим со способом создания этого проекта. - person Cristian Lupascu; 19.12.2013
comment
Хм. Похоже, вам нужно будет перенести проект в более новый стиль. Извините, ссылки больше не помогли. - person Obsidian Phoenix; 19.12.2013
comment
Без проблем. Я не могу перейти на более новую структуру, потому что это чей-то другой проект с открытым исходным кодом, и я только подумал, что внесу небольшую функцию. Я не могу позволить себе все испортить. :) - person Cristian Lupascu; 19.12.2013

Если вы решите создать пакет VSPackage (поскольку я считаю, что это рекомендуемый подход), см. эта страница MSDN и другие ТАК ответьте. Я также покажу, как это сделать с помощью C# и пользовательского элемента управления WPF для страницы параметров в моем блоге здесь.

person deadlydog    schedule 25.04.2014