Есть ли способ скрыть код в расширении VS2010 MEF?

Я работаю над расширением редактора VS2010 с использованием MEF. Теперь я хочу скрыть код по мере необходимости, то есть сделать невидимыми определенные строки кода. Вот пример: Скрытие регионов в Visual Studio

Через MEF я могу получить доступ к TextView, TextBuffer и т. Д. Но я не нашел способа скрыть код или изменить цвет или шрифты отображаемого кода. Думаю, видимость, шрифты и цвет связаны. Я не уверен, может ли VSPackage это сделать, даже если это возможно, это кажется слишком большим для моих требований. Я тоже думал об объекте DTE, пока не знаю.

Может быть, я получил некоторую надежду от http://msdn.microsoft.com/en-us/library/bb165040.aspx. Однако можно ли использовать это в компоненте MEF? В нем говорится о вызове QueryService для SVsTextManager. Что это обозначает?


person Neo    schedule 31.03.2012    source источник
comment
вы можете попросить I Hate #Regions разработчика выпустить код с открытым исходным кодом ..   -  person Jake Berger    schedule 05.04.2012


Ответы (1)


Я начал с расширения #regions:

http://msdn.microsoft.com/en-us/library/dd885121.aspx

В руководстве показано, как выделять текст, и дается много кода для начала.

Обычно вам нужно создать Tagger. Теггер просматривает весь код в файле и помечает фрагменты текста метаданными. Затем вы можете указать VS форматировать текст с тегами, как хотите. Если вам нужно больше возможностей, вы можете использовать классификации (для этого также могут быть учебные пособия), которые позволяют вам изменять размер текста, цвет переднего плана, цвет фона и т. Д. Теггер назначает классификации в методе GetTags примерно так:

new TagSpan<YourTag>(snapshot, new YourTag(
    ClassificationTypeRegistryService.GetClassificationType("yourClassificationName")));

Я сомневаюсь, что вы действительно хотите полностью скрыть код. Если вы редактируете файл, вы должны знать, что есть код для работы с ним (возможно, вы вводите код, который конфликтует со скрытым кодом и т. Д.). В случае расширения #regions вам все равно необходимо убедиться, что вы не удалили, например, строку #endregion или не поместили недопустимый код в регион. Вот почему он делает код маленьким и легким, а не полностью его скрывает.

person NotDan    schedule 06.04.2012
comment
ClassificationTag более мощный. При использовании TextMarkerTag нельзя было применить цвет переднего плана и размер шрифта. Я пробую использовать тег outliningtag. Может быть, мне нужна смесь набросков и небольшого и легкого кода. Вы полностью скрыли этот код между #region и #endregion в I-HATE- # REGION? - person Neo; 09.04.2012
comment
Да, классификации работают лучше. Я думаю, что у меня могла быть такая же проблема, когда я только начинал, когда я не мог изменять размер шрифта, пока не использовал классификации. Я никогда полностью не скрываю код, взгляните на снимок экрана с расширением #region ... Я просто делаю его более мелким шрифтом и более светлым цветом текста, чтобы ваши глаза не заметили его так легко. Вероятно, вы не хотите полностью СКРЫТЬ код, потому что обычно вам все равно нужно управлять кодом, который там есть. - person NotDan; 10.04.2012
comment
Я заметил, что даже если я установил такой маленький размер шрифта, что я его не вижу, строка (теперь пустая) по-прежнему занимает место как видимые. Интересно, если в #region много строк кода, будет ли I-HATE- # REGION работать так, как показано? - person Neo; 12.04.2012
comment
Количество строк в #region ни на что не влияет (для моей реализации). Он влияет только на строки #region и #endregion (но не на промежуточный код). Я никогда не пробовал устанавливать размер шрифта ниже 7 или 9 пунктов. - person NotDan; 13.04.2012
comment
Я только что попробовал Я-НЕНАВИЖУ- # РЕГИОН. Сначала я думал, что это скроет код между #region и #endregion. В любом случае, я понял. Спасибо! - person Neo; 13.04.2012