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

时间:2011-12-20 15:17:26

标签: c# scripting ironpython scintilla avalonedit

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

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

任何指示和建议都表示赞赏。

1 个答案:

答案 0 :(得分:23)

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

如果你的目标是Win32并且你不介意非托管的dll,那么我认为Scintilla.NET不会成为问题。您也可以在this页面建议的情况下轻松地在WPF中托管它。

我个人认为Scintilla比AvalonEdit表现更好。它也更容易开始使用基本编辑器,并且开箱即用,例如Scintilla开箱即用的代码折叠。

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

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

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作为概念证明。也许随着我对编辑的更多了解,我也会形成新的意见。

祝你好运