使用ScintillaNET还是AvalonEdit为WPF应用程序提供脚本接口?(这是一个提问标题)

16
我正在开发一个项目,其中包括为我的WPF (.Net4) Windows应用程序实现脚本界面。我想知道是否有人可以建议一个首选编辑器,AvalonEdit vs ScintillaNET。它们之间有什么优缺点。我们需要支持C#和IronPython作为脚本语言。(至少这是最初的计划。不过我们可能会最终选择其中一种)
ScintillaNET的缺点之一是它只是原生(unmanaged) Scintilla的托管包装器。在与WPF4一起使用时,这会导致任何问题吗?
任何指针和建议都将不胜感激。

2
布万,你最终定下来了吗?(现在,已经过去将近两年了) - Goswin Rothenthal
我在我的源代码中没有使用过这两个组件,但我使用了基于它们的两个产品(QuickSharp基于ScintillaNETSharpDevelop基于AvalonEdit)作为轻量级C#编辑器的替代品。在我看来,SharpDevelop更具特色且更易于使用。 - nawfal
1个回答

23

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

如果您的目标是Win32而且您不介意使用非托管dll,那么我认为Scintilla.NET不会成为问题。 此外,如页面所建议的,您可以轻松地将其托管在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,你需要加载一个外部的高亮文件,你可以访问这篇博客文章获取更多信息。所以如果你只想要基础功能(Python+C#的语法高亮、代码折叠),我的结论是Scintilla更容易使用且性能更好。虽然如果你愿意付出学习曲线和努力的话,使用AvalonEdit可能最终可以做更多的事情。目前我将Scintilla作为我的稳定编辑器,并正在尝试AvalonEdit作为概念验证。也许随着我对编辑器的了解越来越多,我会形成新的看法。

祝好运


9
@Andre,你现在(已经两年之后)还会回答相同的内容吗? - Goswin Rothenthal
是的,我也想回复 @Goswin 的问题。 - gideon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接