ScintillaNET против AvalonEdit за предоставление интерфейса сценариев для приложения WPF - PullRequest
15 голосов
/ 20 декабря 2011

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

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

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

1 Ответ

23 голосов
/ 03 января 2012

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

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

Удачи

...