ScintillaNET vs AvalonEdit для обеспечения интерфейса сценариев для приложения WPF

Я работаю над проектом, который включает в себя реализацию интерфейса сценариев для моего приложения WPF (.Net4). Мне любопытно, может ли кто-нибудь предложить предпочтительный редактор, AvalonEdit vs ScintillaNET. Любые подводные камни и преимущества одного над другим. Мы должны поддерживать как С#, так и IronPython в качестве языков сценариев. (По крайней мере, это первоначальный план. Мы могли бы завершить один из них, хотя).

Одним из недостатков ScintillaNET является то, что это всего лишь управляемая обертка вокруг собственной (неуправляемой) Scintilla. Это вызовет проблемы при использовании с WPF4.

Любые указатели и предложения приветствуются.

Ответы

Ответ 1

Я думаю, это зависит от того, сколько функций вы хотите реализовать в редакторе. Также, сколько работы вы готовы внести, чтобы продлить ее и сколько из кривой обучения вы готовы иметь дело.

Если вы нацеливаете Win32, и вы не против неуправляемой dll, я думаю, что Scintilla.NET не будет проблемой. Также вы можете легко разместить его в WPF как эта страница.

Лично я чувствовал, что Scintilla работает лучше, чем AvalonEdit. Также легче начать работу с базового редактора и обеспечить много из коробки, например, Scintilla предоставляет сводку кода из коробки.

С AvalonEdit вам нужно создать стратегию складывания и самостоятельно проанализировать документ. Это то, что я должен был сделать, чтобы поддерживать IronPython для AvalonEdit, который я еще не реализовал.

Все, что мне нужно для поддержки редактора IronPython в scintilla, это 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 + С#), мой вывод - schintilla проще и работает лучше. Хотя с AvalonEdit вы, возможно, сможете сделать больше в конце, если вы готовы приложить усилия и справиться с кривой обучения. В настоящий момент я использую Scintilla в качестве моего стабильного редактора и экспериментирую с Avalon как доказательство концепции. Возможно, я тоже сформирую новые мнения, так как я больше узнаю об редакторе.

Удачи.