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

Bhu*_*van 15 c# scripting ironpython scintilla avalonedit

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

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

任何指针和建议都表示赞赏.

And*_*dre 23

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

如果你的目标是Win32并且你不介意非托管的DLL那么我认为Scintilla.NET不会是一个问题.页面建议您也可以轻松地在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);
    }
Run Code Online (Sandbox Code Playgroud)

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

祝好运

  • @Andre,你今天还会回复(差不多2年后)吗? (8认同)