【问题标题】:Is there a way to hide code in VS2010 MEF extension?有没有办法在 VS2010 MEF 扩展中隐藏代码?
【发布时间】:2012-03-31 10:06:16
【问题描述】:

我正在使用 MEF 开发 VS2010 编辑器扩展。现在我希望根据需要隐藏代码,即使特定的代码行不可见。这是一个例子:Hiding the regions in Visual Studio

通过 MEF,我可以访问 TextView、TextBuffer 等。但我还没有找到隐藏代码或更改显示代码的颜色或字体的方法。我猜可见性,字体和颜色是相关的。我不确定VSPackage是否可以做到,即使可以,对于我的要求来说似乎太多了。我也想过 DTE 对象,还不知道。

也许我刚刚从http://msdn.microsoft.com/en-us/library/bb165040.aspx 那里得到了一些希望。但是,是否可以在 MEF 组件中使用它?它说要为 SVsTextManager 调用 QueryService。这是什么意思?

【问题讨论】:

  • 您可以要求I Hate #Regions 开发人员将代码作为开源发布..

标签: visual-studio-2010 editor mef vs-extensibility


【解决方案1】:

这是我从#regions 扩展开始的:

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

本教程向您展示如何突出显示文本,并为您提供大量代码以供您入门。

基本上你需要创建一个标记器。标记器遍历文件中的所有代码并用元数据标记文本跨度。然后你可以告诉 VS 格式化你想要的标记文本。如果您想要更多功能,可以使用分类(也可能有教程),允许您更改文本大小、前景色、背景色等。标记器在 GetTags 方法中分配分类,如下所示:

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

我怀疑你真的想完全隐藏代码。如果你正在编辑一个文件,你必须能够知道有代码可以使用它(也许你引入了与隐藏代码冲突的代码等)。例如,在#regions 扩展的情况下,您仍然必须确保不要删除#endregion 行,或者在区域内放置无效代码。这就是为什么它使代码更小更轻,而不是完全隐藏它。

【讨论】:

  • ClassificationTag 更强大。使用 TextMarkerTag 时无法应用前景色和字体大小。我正在尝试使用大纲标签。也许我想要的是大纲和小而轻的代码的混合。您是否完全隐藏了 I-HATE-#REGION 中 #region 和 #endregion 之间的那些代码?
  • 是的,分类似乎效果更好。我想当我刚开始使用分类之前我无法更改字体大小时,我可能遇到了同样的问题。我从不完全隐藏代码,请看一下#region 扩展名上的屏幕截图。我只是将其设置为较小的字体和较浅的颜色文本,这样您的眼睛就不会那么容易注意到它。您可能不想完全隐藏代码 b/c 您通常仍然需要管理那里的代码。
  • 我注意到,即使我设置了这么小的字体大小以至于我看不到它,该行(现在为空白)仍然占用空间作为可见行。不知#region的代码行多,I-HATE-#REGION会不会如图所示执行?
  • #region 中的行数不会影响任何事情(对于我的实现)。它只影响#region 和#endregion 行(不影响其间的代码)。我从未尝试将字体大小设置为低于 7 或 9pt。
  • 我刚试过 I-HATE-#REGION。起初我以为它会隐藏#region 和#endregion 之间的代码。无论如何,我明白了。谢谢!
猜你喜欢
  • 2019-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 2013-06-10
  • 2016-05-29
相关资源
最近更新 更多