用 WPF 开发一个代码编辑器的难度很低,因为行业里面有很多小伙伴开发过,这些小伙伴将自己的代码开源了,发布到 NuGet 上,所以让我开发一个代码编辑器的难度实在太低。在不要有奇特的要求情况下,通过 AvalonEdit 可以快速开发出自己想要的代码编辑器

第一步通过 NuGet 安装 AvalonEdit 打开 xaml 界面,添加控件,此时可以在界面设置代码高亮方式等

        <avalonEdit:TextEditorxmlns:avalonEdit="http://icsharpcode.net/sharpdevelop/avalonedit"Name="TextEditor"SyntaxHighlighting="C#"FontFamily="Consolas"FontSize="10pt" LineNumbersForeground="Black" ShowLineNumbers="True"><avalonEdit:TextEditor.Options><avalonEdit:TextEditorOptions ShowSpaces="True" ><avalonEdit:TextEditorOptions.ColumnRulerPosition><system:Int32>10</system:Int32></avalonEdit:TextEditorOptions.ColumnRulerPosition></avalonEdit:TextEditorOptions></avalonEdit:TextEditor.Options></avalonEdit:TextEditor>

下面是详细一点的参数含义

第二句话的 xmlns:avalonEdit="http://icsharpcode.net/sharpdevelop/avalonedit" 是命名空间

设置 AvalonEdit 进行代码高亮,可以自定义高亮颜色等,设置对 C# 代码进行高亮方法是 SyntaxHighlighting="C#" 而对 xml 高亮的方法自然就是将 C# 修改为 XML 请看代码

            SyntaxHighlighting="XML"

设置 AvalonEdit 的代码字体和大小分别是 FontFamily 和 FontSize 属性

很多代码编辑器都有行号,通过 ShowLineNumbers 属性让自己用 WPF 写的代码编辑器可以显示行号

ShowLineNumbers="True"

作为代码编辑器,还有一项功能是需要将空格用 · 显示,通过设置 TextEditorOptions 的方法

            <avalonEdit:TextEditor.Options><avalonEdit:TextEditorOptions ShowSpaces="True" ><avalonEdit:TextEditorOptions.ColumnRulerPosition><system:Int32>10</system:Int32></avalonEdit:TextEditorOptions.ColumnRulerPosition></avalonEdit:TextEditorOptions></avalonEdit:TextEditor.Options>

代码对齐很重要,最简单的代码对齐就是继承上一行的空格数量,通过下面属性让 AvalonEdit 支持设置继承上一行的行首空格

            <avalonEdit:TextEditor.Options><avalonEdit:TextEditorOptions ShowSpaces="True" WordWrapIndentation="4" InheritWordWrapIndentation="true"><avalonEdit:TextEditorOptions.ColumnRulerPosition><system:Int32>10</system:Int32></avalonEdit:TextEditorOptions.ColumnRulerPosition></avalonEdit:TextEditorOptions></avalonEdit:TextEditor.Options>

作为代码编辑器,如何能不自动提示?自动提示也就是用户输入特殊字符时,如空格和 . 提示用户可以输入的内容

在用户输入特殊字符触发特定事件可以通过下面代码

        public MainWindow(){InitializeComponent();TextEditor.TextArea.TextEntered += TextAreaOnTextEntered;}private void TextAreaOnTextEntered(object sender, TextCompositionEventArgs e){if (e.Text == "."){}}

上面代码将会在用户输入 . 进入判断

在 AvalonEdit 通过 CompletionWindow 类做到代码自动补全,需要先自己继承 ICompletionData 接口创建提示数据

    public class CompletionData : ICompletionData{public CompletionData(string text){Text = text;}public ImageSource Image => null;public string Text { get;  }public object Content => Text;public object Description => "Description for " + this.Text;/// <inheritdoc />public double Priority { get; }public void Complete(TextArea textArea, ISegment completionSegment,EventArgs insertionRequestEventArgs){textArea.Document.Replace(completionSegment, Text);}}

基本上看到参数大家都理解这是用来做什么

创建CompletionWindow然后显示代码如下

        private void TextAreaOnTextEntered(object sender, TextCompositionEventArgs e){if (e.Text == "."){_completionWindow = new CompletionWindow(TextEditor.TextArea);var completionData = _completionWindow.CompletionList.CompletionData;completionData.Add(new CompletionData("林德熙是逗比"));_completionWindow.Show();_completionWindow.Closed += (o, args) => _completionWindow = null;}}private CompletionWindow _completionWindow;

大概的效果如下

本文的代码放在 github 欢迎小伙伴访问

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

如有不方便在博客评论的问题,可以加我 QQ 2844808902 交流


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

WPF 用 AvalonEdit 开发简单的代码编辑器 支持高亮自动提示相关推荐

  1. 用Tkinter打造自己的Python IDE开发工具(1)建立一个简单的代码编辑器

    用Tkinter打造自己的Python IDE开发工具(1)建立一个简单的代码编辑器 很多Python初学者,安装完Python后,已经包含了IDLE代码开发和调试系统.都会再安装各种Python开发 ...

  2. python软件包自带的集成开发环境-Python的10大集成开发环境和代码编辑器(指南)...

    使用IDLE或者Python Shell来编写Python是非常适合于简单程序的,但是这些工具往往将大型的编程项目变成一个个充满绝望和沮丧的"坑".使用一款集成开发环境甚至是一款好 ...

  3. python自带的集成开发环境是什么-Python的10大集成开发环境和代码编辑器(指南)...

    使用IDLE或者Python Shell来编写Python是非常适合于简单程序的,但是这些工具往往将大型的编程项目变成一个个充满绝望和沮丧的"坑".使用一款集成开发环境甚至是一款好 ...

  4. Python的10大集成开发环境和代码编辑器(指南)

    分享一篇文章,原文链接:Python IDEs and Code Editors (Guide). 使用IDLE或者Python Shell来编写Python是非常适合于简单程序的,但是这些工具往往将 ...

  5. 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

    从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 这段时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Calibu ...

  6. WPF框架教程 | 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

    之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Caliburn.Micro(https://blog.csdn.net/lzuacm/ar ...

  7. 10款开发常用的代码编辑器

    这篇文章会介绍10个优秀且免费的编辑器,它们都是非常方便易用的环境,你可以用它们来编写代码,查看源文件和文档等,简化你的工作. Notepad++ Notepad++是一款免费但优秀的代码编辑器,运行 ...

  8. 为你推荐10款开发常用的代码编辑器

    代码编辑器对于程序员来说十分重要,一个好的编辑器可以节省开发时间,提高工作效率.这篇文章会介绍10个优秀且免费的编辑器,它们都是非常方便易用的环境,你可以用它们来编写代码,查看源文件和文档等,简化你的 ...

  9. code vs 集成tfs_10大Python集成开发环境和代码编辑器

    支持Python的通用编辑器和集成开发环境 Eclipse + PyDev 类别:集成开发环境 网址:www.eclipse.org Python工具:PyDev, www.pydev.org 优点: ...

最新文章

  1. ROR与社区网站开发
  2. 你眼中的OA行业发展前景
  3. linux 中的source命令
  4. 注入eval,Function等系统函数,截获动态代码
  5. python 元组遍历_Python中的for循环:元组、列表、字典的遍历和相互转化
  6. java照片墙_基于jQuery实现照片墙自动播放特效
  7. WebSocket请求过程分析及实现Web聊天室
  8. 【R语言】R是现在最好的数据科学语言吗?
  9. 全国大学生创新创业比赛-----采油厂绩效考核系统的设计与开发
  10. 如何使用C#进行Visio二次开发-总结版
  11. Building your Deep Neural Network - Step by Step v5 作业 - Neural Networks and Deep Learning
  12. 最新过浩方过VS魔兽1.24b全图工具发布
  13. 高数篇:06零点问题与微分不等式
  14. RGB彩色空间和YIQ、灰度等的转化
  15. 求出本周是第几周,本周的周一和周日时间
  16. 江城武汉,一座离开后会怀念的城市
  17. 汇编指令 int 21 h 调用
  18. Leetcode Golang 77. Combinations.go
  19. 什么是CART算法?怎么对CART进行建树?怎么对CART进行减枝叶?CART Python实现代码
  20. Python来帮你玩微信跳一跳

热门文章

  1. 密码学基础知识---CFB---OFB---CTR
  2. 用python处理excel数据、求线性回归方程的r值_使用Excel求线性回归直线方程
  3. Android Tip : Android GestureDetector 手势识别 抬起 操作
  4. mmdetection训练报错
  5. Jupyter Notebooks嵌入Excel并使用Python替代VBA宏
  6. xxl-sso源码解读(基于Cookie)
  7. JAVA利用URL从网上下载音乐资源
  8. 185 MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法
  9. Jetson Nano 踩坑记
  10. setTimeout模拟setInterval