我想在我的应用程序中包含一个 XML 编辑器 - 类似于 VS 的具有自动着色功能的 XML 编辑器等。
AvalonEdit 听起来是一个很好的解决方案。
但是,AvalonEdit 附带了一个 C# 语法示例,而不是 XML 语法。某处是否有 XML 语法的示例?
我想在我的应用程序中包含一个 XML 编辑器 - 类似于 VS 的具有自动着色功能的 XML 编辑器等。
AvalonEdit 听起来是一个很好的解决方案。
但是,AvalonEdit 附带了一个 C# 语法示例,而不是 XML 语法。某处是否有 XML 语法的示例?
只需SyntaxHighlighting="XML"
在您的 XAML 中使用:
xmlns:avalonedit="http://icsharpcode.net/sharpdevelop/avalonedit"
...
<StackPanel>
<avalonedit:TextEditor SyntaxHighlighting="XML"/>
</StackPanel>
您所要做的就是更改 Avalon 中的 xshd 文件以将其更改为您需要的语言要求。SharpDevelop Git 上已经提供了许多通用语言语法突出显示:链接
对于 XML,xshd 文件如下所示:
<SyntaxDefinition name="XML" extensions=".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;.booproj;.build;.xfrm;.targets;.xaml;.xpt;.xft;.map;.wsdl;.disco;.ps1xml;.nuspec" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
<Color foreground="Green" name="Comment" exampleText="<!-- comment -->" />
<Color foreground="Blue" name="CData" exampleText="<![CDATA[data]]>" />
<Color foreground="Blue" name="DocType" exampleText="<!DOCTYPE rootElement>" />
<Color foreground="Blue" name="XmlDeclaration" exampleText='<?xml version="1.0"?>' />
<Color foreground="DarkMagenta" name="XmlTag" exampleText='<tag attribute="value" />' />
<Color foreground="Red" name="AttributeName" exampleText='<tag attribute="value" />' />
<Color foreground="Blue" name="AttributeValue" exampleText='<tag attribute="value" />' />
<Color foreground="Teal" name="Entity" exampleText="index.aspx?a=1&amp;b=2" />
<Color foreground="Olive" name="BrokenEntity" exampleText="index.aspx?a=1&b=2" />
<RuleSet>
<Span color="Comment" multiline="true">
<Begin><!--</Begin>
<End>--></End>
</Span>
<Span color="CData" multiline="true">
<Begin><!\[CDATA\[</Begin>
<End>]]></End>
</Span>
<Span color="DocType" multiline="true">
<Begin><!DOCTYPE</Begin>
<End>></End>
</Span>
<Span color="XmlDeclaration" multiline="true">
<Begin><\?</Begin>
<End>\?></End>
</Span>
<Span color="XmlTag" multiline="true">
<Begin><</Begin>
<End>></End>
<RuleSet>
<!-- Treat the position before '<' as end, as that's not a valid character
in attribute names and indicates the user forgot a closing quote. -->
<Span color="AttributeValue" multiline="true" ruleSet="EntitySet">
<Begin>"</Begin>
<End>"|(?=<)</End>
</Span>
<Span color="AttributeValue" multiline="true" ruleSet="EntitySet">
<Begin>'</Begin>
<End>'|(?=<)</End>
</Span>
<Rule color="AttributeName">[\d\w_\-\.]+(?=(\s*=))</Rule>
<Rule color="AttributeValue">=</Rule>
</RuleSet>
</Span>
<Import ruleSet="EntitySet"/>
</RuleSet>
<RuleSet name="EntitySet">
<Rule color="Entity">
&
[\w\d\#]+
;
</Rule>
<Rule color="BrokenEntity">
&
[\w\d\#]*
#missing ;
</Rule>
</RuleSet>
</SyntaxDefinition>