Sha*_*ron 9 syntax-highlighting vspackage visual-studio visual-studio-extensions visual-studio-2012
我想在Visual Studio 2012(及更高版本)中创建一个支持不同主题(黑暗,浅色,蓝色)的语法荧光笔.
Visual Studio的编辑器分类器项目模板说明了如何使用环境创建自己的颜色Microsoft.VisualStudio.Text.Classification.ClassificationFormatDefinition.它工作正常......
...直到您意识到Visual Studio 2012(及更高版本)中存在不同的主题,并且您并不真正支持它们.在黑暗的主题环境中,浅色主题上漂亮的深蓝色标识符变得难以辨认.
根据我的理解,如果您在给定主题(例如:Light)中的工具/选项/字体和颜色中更改ClassificationFormatDefinition,它将不会影响不同主题中的相同ClassificationFormatDefinition(例如:Dark).颜色似乎在不同的主题上是独立的.
那很好.但是我如何实现定义在所有主题中具有相同名称的相同ClassificationFormatDefinition(例如:MyKeywords),但为它们提供不同的颜色?就像Visual Studio自己的"标识符"一样,它在Light主题上是默认的黑色,在黑色主题上是默认的.
我知道这个Microsoft.VisualStudio.PlatformUI.VSColorTheme.ThemeChanged事件可以让我在更改颜色主题时收到通知.我是否必须使用它并以某种方式获取我现有的ClassificationFormatDefinition并根据新主题为它们分配新颜色?但这也提出了一个问题:这些修改后的颜色是否会持久保存到环境中,即如果我重新启动Visual Studio,下次在所有不同的主题中我的更改是否会存在.
我没有找到任何属性来说明ClassificationFormatDefinition支持哪个主题,也没有找到关于这个主题的非常有用的文章.
任何帮助赞赏.
好的,这是我找到的解决方法。它远非完美,但已经尽力了。
诀窍是在定义自己的分类类型时使用另一个基本定义。这将为不同的主题使用默认颜色。重要的是,您不能定义自己的颜色,MyKeywordsFormatDefinition因为这会在主题之间切换时禁用默认行为。因此,尝试找到与您的颜色相匹配的基本定义。在此处查找预定义的分类类型:Microsoft.VisualStudio.Language.StandardClassification.PredefinedClassificationTypeNames
internal static class Classifications
{
// ...
public const string MyKeyword = "MyKeyword";
// ...
}
[Export(typeof(EditorFormatDefinition))]
[ClassificationType(ClassificationTypeNames = Classifications.MyKeyword)]
[Name("MyKeywords")]
[DisplayName("My Keywords")]
[UserVisible(true)]
internal sealed class MyKeywordsFormatDefinition: ClassificationFormatDefinition
{
// Don't set the color here, as it will disable the default color supporting themes
}
[Export(typeof(ClassificationTypeDefinition))]
[Name(Classifications.MyKeyword)]
[BaseDefinition(PredefinedClassificationTypeNames.Keyword)]
internal static ClassificationTypeDefinition MyKeywordsTypeDefinition;
Run Code Online (Sandbox Code Playgroud)
我希望它对你们中的一些人有用。当您实际上可以设置自己的颜色而无需重复使用现有的颜色定义时,甚至可能有助于完善正确的解决方案。
| 归档时间: |
|
| 查看次数: |
1165 次 |
| 最近记录: |