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

本文关键字:脚本 接口 应用程序 WPF vs AvalonEdit ScintillaNET | 更新日期: 2023-09-27 18:18:29

我正在做一个项目,其中包括为我的WPF (. net 4) windows应用程序实现脚本接口。我很好奇是否有人可以建议一个首选的编辑器,AvalonEdit vs ScintillaNET。一个比另一个的缺点和优点。我们需要同时支持c#和IronPython作为脚本语言。(至少这是最初的计划。我们可能会最终确定其中一个)。

ScintillaNET的缺点之一是它只是本机(非托管)Scintilla的托管包装器。当与WPF4一起使用时,这会导致任何问题吗?

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

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

如果你的目标是Win32,你不介意非托管的dll,那么我认为Scintilla。. NET不会是问题。你也可以很容易地在WPF中托管它,就像这个页面建议的那样。

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

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

在scintilla中支持IronPython编辑器所需要的只是搜索路径中的sciler .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,你必须加载一个外部荧光笔文件,你可以看到这篇博客文章了解更多信息。所以如果你想要基本的(高亮显示,python+c#的折叠),我的结论是schintilla更简单,性能更好。虽然有了AvalonEdit,如果你愿意付出努力并处理学习曲线,你最终可能会做得更多。目前,我正在使用Scintilla作为我的稳定编辑器,并正在试验Avalon作为概念的证明。也许随着我对编辑了解的加深,我也会形成新的看法。

好运