演练:自定义文本视图
可以通过修改其编辑器格式映射中的任何属性来自定义文本视图:
指示器边距
插入插入符号
覆盖插入符号
所选文本
非活动选定文本(即失去焦点的选定文本)
可见空格
创建 MEF 项目
创建 C# VSIX 项目。 (在 “新建项目 ”对话框,选择 Visual C# /扩展性,然后选择 VSIX Project。)将解决方案
ViewPropertyTest
命名为 。向项目添加编辑器分类器项模板。 有关详细信息,请参阅使用编辑器项模板创建扩展。
删除现有的类文件。
定义内容类型
添加一个类文件并将其命名为
ViewPropertyModifier
。然后,添加以下
using
指令:声明一个从 . 继承的IWpfTextViewCreationListener类
TestViewCreationListener
。 使用以下属性导出此类:ContentTypeAttribute 如果指定此侦听器应用到的内容类型,则为 。
TextViewRoleAttribute 指定此侦听器的角色。
在此类中,导入 .IEditorFormatMapService
更改视图属性
设置 TextViewCreated 方法,以便在打开视图时更改视图属性。 若要进行更改,请首先找到 ResourceDictionary 与要查找的视图方面对应的内容。 然后,更改资源字典中的相应属性并设置属性。 通过在BeginBatchUpdate设置属性之前调用方法,然后在EndBatchUpdate设置属性之后,对方法的调用SetProperties进行批处理。
public void TextViewCreated(IWpfTextView textView) { IEditorFormatMap formatMap = FormatMapService.GetEditorFormatMap(textView); ResourceDictionary regularCaretProperties = formatMap.GetProperties("Caret"); ResourceDictionary overwriteCaretProperties = formatMap.GetProperties("Overwrite Caret"); ResourceDictionary indicatorMargin = formatMap.GetProperties("Indicator Margin"); ResourceDictionary visibleWhitespace = formatMap.GetProperties("Visible Whitespace"); ResourceDictionary selectedText = formatMap.GetProperties("Selected Text"); ResourceDictionary inactiveSelectedText = formatMap.GetProperties("Inactive Selected Text"); formatMap.BeginBatchUpdate(); regularCaretProperties[EditorFormatDefinition.ForegroundBrushId] = Brushes.Magenta; formatMap.SetProperties("Caret", regularCaretProperties); overwriteCaretProperties[EditorFormatDefinition.ForegroundBrushId] = Brushes.Turquoise; formatMap.SetProperties("Overwrite Caret", overwriteCaretProperties); indicatorMargin[EditorFormatDefinition.BackgroundColorId] = Colors.LightGreen; formatMap.SetProperties("Indicator Margin", indicatorMargin); visibleWhitespace[EditorFormatDefinition.ForegroundColorId] = Colors.Red; formatMap.SetProperties("Visible Whitespace", visibleWhitespace); selectedText[EditorFormatDefinition.BackgroundBrushId] = Brushes.LightPink; formatMap.SetProperties("Selected Text", selectedText); inactiveSelectedText[EditorFormatDefinition.BackgroundBrushId] = Brushes.DeepPink; formatMap.SetProperties("Inactive Selected Text", inactiveSelectedText); formatMap.EndBatchUpdate(); }
生成并测试代码
生成解决方案。
在调试器中运行此项目时,将启动 Visual Studio 的第二个实例。
创建一个文本文件并键入一些文本。
插入插入插入点应为洋红色,覆盖插入点应为绿松石。
指示器边距(文本视图左侧)应为浅绿色。
选择键入的文本。 所选文本的颜色应为浅粉色。
选择文本时,单击文本窗口外的任意位置。 所选文本的颜色应为深粉红色。
打开可见的空格。 (On the “编辑 ”菜单,指向 “高级 ”,然后单击“ 查看空格”。 在文本中键入一些选项卡。 应显示表示选项卡的红色箭头。