700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > WPF 使用AvalonEdit实现代码编译器

WPF 使用AvalonEdit实现代码编译器

时间:2019-01-17 01:59:35

相关推荐

WPF 使用AvalonEdit实现代码编译器

WPF 使用AvalonEdit实现代码编译器

1.先在项目中NuGet安装一下AvalonEdit,如下图,选择第一项:

2.接着把下面的文件内容,保存为Lua.xshd文件名的文件(这个文件主要设置关键字显示的样式):

<?xml version="1.0"?><SyntaxDefinition name="SharpLua" extensions=".slua;.lua" xmlns="/sharpdevelop/syntaxdefinition/"><!-- The named colors 'Comment' and 'String' are used in SharpDevelop to detect if a line is inside a multiline string/comment --><Color name="Comment" foreground="#ff999999" exampleText="-- comment" /><Color name="String" foreground="#fff99157" /><Color name="Punctuation" /><Color name="MethodCall" foreground="#ffffcc66" fontWeight="bold"/><Color name="NumberLiteral" foreground="#ff99cc99"/><Color name="NilKeyword" fontWeight="bold"/><Color name="Keywords" fontWeight="bold" foreground="#ff6699cc" /><Color name="GotoKeywords" foreground="#ffcc99cc" /><Color name="Visibility" fontWeight="bold" foreground="#fff99157"/><Color name="TrueFalse" fontWeight="bold" foreground="#ff66cccc" /><RuleSet name="CommentMarkerSet"><Keywords fontWeight="bold" foreground="#fff2777a"><Word>TODO</Word><Word>FIXME</Word></Keywords><Keywords fontWeight="bold" foreground="#fff2777a"><Word>HACK</Word><Word>UNDONE</Word></Keywords></RuleSet><!-- This is the main ruleset. --><RuleSet><Span color="Comment"><Begin color="XmlDoc/DocComment">---</Begin><RuleSet><Import ruleSet="XmlDoc/DocCommentSet"/><Import ruleSet="CommentMarkerSet"/></RuleSet></Span><Span color="Comment" ruleSet="CommentMarkerSet" multiline="true"><Begin>--\[[=]*\[</Begin><End>\][=]*]</End></Span><Span color="Comment" ruleSet="CommentMarkerSet"><Begin>--</Begin></Span><Span color="String"><Begin>"</Begin><End>"</End><RuleSet><!-- span for escape sequences --><Span begin="\\" end="."/></RuleSet></Span><Span color="String"><Begin>'</Begin><End>'</End><RuleSet><!-- span for escape sequences --><Span begin="\\" end="."/></RuleSet></Span><Span color="String" multiline="true"><Begin color="String">\[[=]*\[</Begin><End>\][=]*]</End></Span><Keywords color="TrueFalse"><Word>true</Word><Word>false</Word></Keywords><Keywords color="Keywords"><Word>and</Word><Word>break</Word><Word>do</Word><Word>else</Word><Word>elseif</Word><Word>end</Word><Word>false</Word><Word>for</Word><Word>function</Word><Word>if</Word><Word>in</Word><Word>local</Word><!--<Word>nil</Word>--><Word>not</Word><Word>or</Word><Word>repeat</Word><Word>return</Word><Word>then</Word><Word>true</Word><Word>until</Word><Word>while</Word><Word>using</Word><Word>continue</Word></Keywords><Keywords color="GotoKeywords"><Word>break</Word><Word>return</Word></Keywords><Keywords color="Visibility"><Word>local</Word></Keywords><Keywords color="NilKeyword"><Word>nil</Word></Keywords><!-- Mark previous rule--><Rule color="MethodCall">\b[\d\w_]+ # an identifier(?=\s*\() # followed by (</Rule><Rule color="MethodCall">\b[\d\w_]+ # an identifier(?=\s*\") # followed by "</Rule><Rule color="MethodCall">\b[\d\w_]+ # an identifier(?=\s*\') # followed by '</Rule><Rule color="MethodCall">\b[\d\w_]+ # an identifier(?=\s*\{) # followed by {</Rule><Rule color="MethodCall">\b[\d\w_]+ # an identifier(?=\s*\[) # followed by [</Rule><!-- Digits --><Rule color="NumberLiteral">\b0[xX][0-9a-fA-F]+ # hex number|( \b\d+(\.[0-9]+)? #number with optional floating point| \.[0-9]+ #or just starting with floating point)([eE][+-]?[0-9]+)? # optional exponent</Rule><Rule color="Punctuation">[?,.;()\[\]{}+\-/%*&lt;&gt;^+~!|&amp;]+</Rule></RuleSet></SyntaxDefinition>

把Lua.xshd放到解决方案资源管理器中,生成操作改为嵌入的资源

3.xaml里的代码如下:

<avalonEdit:TextEditorGrid.Row="2"xmlns:avalonEdit="/sharpdevelop/avalonedit"Name="textEditor"FontFamily="Consolas"FontSize="10pt"ShowLineNumbers="True"LostFocus="TextEditor_LostFocus"/>

然后在窗体的loaded事件中运行下面的代码即可:

//快速搜索功能SearchPanel.Install(textEditor.TextArea);//设置语法规则string name = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".Lua.xshd";System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();using (System.IO.Stream s = assembly.GetManifestResourceStream(name)){using (XmlTextReader reader = new XmlTextReader(s)){var xshd = HighlightingLoader.LoadXshd(reader);textEditor.SyntaxHighlighting = HighlightingLoader.Load(xshd, HighlightingManager.Instance);}}

如果需要加载需要的代码文件:

textEditor.Load(filename);

效果:

添加右键菜单(在窗体构造函数中添加如下即可):

ContextMenu aMenu = new ContextMenu();MenuItem copyMenuItem = new MenuItem();copyMenuItem.Header = "复制(C)";copyMenuItem.Click += (sender, eventArgs) => rtb_TextArea.Copy();aMenu.Items.Add(copyMenuItem);MenuItem selectAllItem = new MenuItem();selectAllItem.Header = "全选(A)";selectAllItem.Click += (sender, eventArgs) => rtb_TextArea.SelectAll();aMenu.Items.Add(selectAllItem);rtb_TextArea.ContextMenu = aMenu;

扩展介绍:

或者我们也可以将语法显示的xshd配置文件的文件属性设置为不复制,生成操作设置为Resource;

然后使用绝对路径调用:

using (XmlTextReader xmlTextReader = new XmlTextReader(Application.GetResourceStream(new Uri("pack://application:,,,/WPF001;component/Files/Config.xshd")).Stream)){rtb_ContentArea.SyntaxHighlighting = HighlightingLoader.Load(xmlTextReader, HighlightingManager.Instance);}

备注:详细介绍

/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。