ScintillaNET 与 AvalonEdit 为 WPF 应用程序提供脚本接口

Posted

技术标签:

【中文标题】ScintillaNET 与 AvalonEdit 为 WPF 应用程序提供脚本接口【英文标题】:ScintillaNET vs AvalonEdit for providing scripting interface for a WPF Application 【发布时间】:2012-01-24 13:05:06 【问题描述】:

我正在开发一个项目,其中包括为我的 WPF (.Net4) windows 应用程序实现脚本接口。我很好奇是否有人可以推荐一个首选的编辑器,AvalonEdit vs ScintillaNET。任何一个相对于另一个的缺陷和优势。我们需要同时支持 C# 和 IronPython 作为脚本语言。 (至少这是最初的计划。我们可能会最终确定其中一个)。

ScintillaNET 的一个缺点是它只是原生(非托管)Scintilla 的托管包装器。这在与 WPF4 一起使用时会导致任何问题吗?

感谢任何指针和建议。

【问题讨论】:

Bhuvan,你最终选择了什么? (现在,差不多 2 年后) 我没有在我的源代码中使用任何一个组件,但是我使用了两个基于每个的产品(QuickSharp 基于ScintillaNETSharpDevelop 基于AvalonEdit)作为替代轻量级 C# 编辑器。 Imo,SharpDevelop 更有特色,更容易使用。 【参考方案1】:

我认为这取决于您要在编辑器中实现多少功能。还有你愿意投入多少工作来扩展它,以及你愿意处理多少学习曲线。

如果您的目标是 Win32 并且您不介意非托管 dll,那么我认为 Scintilla.NET 不会有问题。您还可以按照this 页面的建议轻松地将其托管在 WPF 中。

我个人觉得 Scintilla 比 AvalonEdit 表现更好。使用基本编辑器也更容易上手,并且提供了很多开箱即用的功能,例如 Scintilla 提供开箱即用的代码折叠功能。

使用 AvalonEdit,您必须创建一个折叠策略并自己解析文档,这是我必须做的,以支持我尚未实现的 AvalonEdit 的 IronPython。

在 scintilla 中支持 IronPython 编辑器只需要搜索路径中的 SciLexer.dll 和 Scintilla.net 程序集以及以下配置:

private void Form1_Load(object sender, EventArgs e)
    
        this.scintilla1 = new ScintillaNet.Scintilla();
        this.scintilla1.ConfigurationManager.Language = "python";
        this.scintilla1.Indentation.ShowGuides = true;
        this.scintilla1.Indentation.SmartIndentType = ScintillaNet.SmartIndent.Simple;
        this.scintilla1.Location = new System.Drawing.Point(0, 0);
        this.scintilla1.Margins.Margin0.Width = 40;
        this.scintilla1.Margins.Margin2.Width = 20;
        this.scintilla1.Name = "scintilla1";
        this.scintilla1.TabIndex = 4;
        this.scintilla1.Whitespace.Mode = ScintillaNet.WhitespaceMode.VisibleAfterIndent;
        this.scintilla1.Dock = DockStyle.Fill;
        this.Controls.Add(this.scintilla1);
    

对于 AvalonEdit,您必须加载外部荧光笔文件,您可以查看 this 博客文章了解更多信息。因此,如果您想要基础知识(突出显示,python+c# 的折叠),我的结论是 schintilla 更容易并且性能更好。尽管使用 AvalonEdit,如果您愿意付出努力并应对学习曲线,您最终可能会做得更多。目前我正在使用 Scintilla 作为我的稳定编辑器,并正在尝试使用 Avalon 作为概念证明。随着对编辑器的了解越来越多,也许我也会形成新的看法。

祝你好运

【讨论】:

谢谢安德烈。这很有帮助 @Andre,你今天(差不多 2 年后)还会回复同样的内容吗? 是的,我也想回复@Goswin 的问题。

以上是关于ScintillaNET 与 AvalonEdit 为 WPF 应用程序提供脚本接口的主要内容,如果未能解决你的问题,请参考以下文章

基于WPF&Prism&AvalonEdit的XAML轻量编辑器

AvalonEdit :TextEditor 是不是具有快速搜索/替换功能?

AvalonEdit验证语法并提示错误

从 ScintillaNet 打印内容时打印行号

使用 MVVM 两种方式绑定到 AvalonEdit 文档文本

VB.NET 中的 ScintillaNET 问题