我试图为AvalonEdit定义一些定制的高亮显示规则。这方面似乎没有任何文档--有关于文件格式的一些文档,但是在创建定义之后,没有任何关于如何实际加载和使用该定义的内容。
"语法高亮“wiki页面(针对旧的WinForms TextEditor)记录了如何从磁盘上的.xshd文件加载高亮显示定义,但我宁愿将其作为资源嵌入,就像AvalonEdit对内置定义所做的那样。
我看过ICSharpCode.AvalonEdit项目中加载其内置荧光笔的代码,但是实际的“从资源加载”代码是在DefaultHighlightingManager.LoadHighlighting中完成的,这是私有的--为了使事情变得更奇怪,显然只在发布版本中调用它。
我可以不停地摸索,从私有方法中复制/粘贴一些代码,并试图拼凑出一些可能或不起作用的东西,但似乎值得问一问:是这样做的标准方法吗?是否建议第三方代码从资源中加载一个突出显示定义?
丹尼尔的回答给了我一个很好的开始,但是您需要在传递给GetManifestResourceStream的字符串中包含名称空间名称--如果没有,您将得到一个NullReferenceException (因为它返回一个空流)。
最后,我使用以下方法将名为ResourceLoader的静态类添加到与.xshd文件相同的项目文件夹中:
public static IHighlightingDefinition LoadHighlightingDefinition(
string resourceName)
{
var type = typeof(ResourceLoader);
var fullName = type.Namespace + "." + resourceName;
using (var stream = type.Assembly.GetManifestResourceStream(fullName))
using (var reader = new XmlTextReader(stream))
return HighlightingLoader.Load(reader, HighlightingManager.Instance);
}
然后我可以打电话给ResourceLoader.LoadHighlightingDefinition("Name.xshd")
。
对于在家跟踪的任何人,.xshd文件需要将其Build设置为Embedded。
发布于 2011-02-20 14:03:03
可以使用类ICSharpCode.AvalonEdit.Highlighting.Xshd.HighlightingLoader
中的静态方法加载.xshd文件。例如:
using (Stream s = myAssembly.GetManifestResourceStream("MyHighlighting.xshd")) {
using (XmlTextReader reader = new XmlTextReader(s)) {
textEditor.SyntaxHighlighting = HighlightingLoader.Load(reader, HighlightingManager.Instance);
}
}
AvalonEdit本身的加载代码很奇怪,因为它急切地在调试构建中加载xshd(因此它们中的错误立即被注意到),但是延迟加载它们在发布版本中。
发布于 2017-10-01 12:59:03
我个人更喜欢使用RegisterHighlighting
注册突出显示定义的方式,然后您可以像其他内置定义一样在XAML中使用它。
C#
public partial class App : Application
{
public App()
{
using (var stream = new System.IO.MemoryStream(WpfApp15.Properties.Resources.sql))
{
using (var reader = new System.Xml.XmlTextReader(stream))
{
ICSharpCode.AvalonEdit.Highlighting.HighlightingManager.Instance.RegisterHighlighting("SQL", new string[0],
ICSharpCode.AvalonEdit.Highlighting.Xshd.HighlightingLoader.Load(reader,
ICSharpCode.AvalonEdit.Highlighting.HighlightingManager.Instance));
}
}
}
}
XAML
<avalon:TextEditor SyntaxHighlighting="SQL"/>
发布于 2013-10-18 17:30:04
值得注意的是,如果您正在使用F#,这是一个用于注册xshd文件的代码片段。
let registerHighlighting() =
try
// Load our custom highlighting definition
match System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("GSLhighlighting.xshd") with
| null -> failwithf "ERROR: could not find embedded resource"
| s ->
use reader = new XmlTextReader(s)
let gslHighlighting = ICSharpCode.AvalonEdit.Highlighting.Xshd.HighlightingLoader.Load(reader, HighlightingManager.Instance)
// and register it in the HighlightingManager
HighlightingManager.Instance.RegisterHighlighting("GSL", [| ".gsl" |], gslHighlighting)
editor.SyntaxHighlighting <- gslHighlighting
with _ as exn ->
printfn "ERROR: %s" exn.Message
https://stackoverflow.com/questions/5057210
复制相似问题