2011-12-20 12 views
15

Pracuję nad projektem, który obejmuje implementację interfejsu skryptowania dla mojej aplikacji Windows WPF (.Net4). Jestem ciekawy, czy ktokolwiek może zaproponować preferowanego edytora, AvalonEdit vs ScintillaNET. Wszelkie pułapki i zalety jednej nad drugą. Musimy wspierać zarówno język C#, jak i IronPython jako języki skryptowe. (Przynajmniej taki jest początkowy plan, możemy sfinalizować na jednym z nich).ScintillaNET kontra AvalonEdit zapewniający interfejs skryptowy dla aplikacji WPF

Jedną z wad aplikacji ScintillaNET jest to, że jest to tylko zarządzane opakowanie wokół natywnego (niezarządzanego) Scintilla. Czy to spowoduje problemy podczas korzystania z WPF4.

Wszelkie wskazówki i sugestie są mile widziane.

+2

Bhuvan, na co się ostatecznie zdecydowałeś? (teraz, prawie 2 lata później) – Goswin

+0

Nie użyłem jako komponentu w moim kodzie źródłowym, ale użyłem dwóch produktów opartych na każdym ('QuickSharp' opartym na' ScintillaNET' i 'SharpDevelop' opartym na' AvalonEdit') jako alternatywny lekki edytor C#. Imo, 'SharpDevelop' był bardziej funkcjonalny i łatwiejszy w obsłudze. – nawfal

Odpowiedz

22

Myślę, że zależy to od liczby funkcji, które chcesz zaimplementować w edytorze. Również ile pracy chcesz poświęcić na jej przedłużenie i ile krzywej uczenia się chcesz sobie poradzić.

Jeśli celujesz w Win32 i nie masz nic przeciwko niezarządzanej dll to myślę, że Scintilla.NET nie będzie problemem. Możesz także łatwo go hostować w WPF, jak sugeruje strona this.

Osobiście czułem, że Scintilla działa lepiej niż AvalonEdit. Łatwiej jest także rozpocząć pracę z podstawowym edytorem i zapewnia on wiele dodatkowych opcji, na przykład Scintilla zapewnia składanie kodu poza zestaw.

Z AvalonEdit trzeba utworzyć strategię składania i samemu przeanalizować dokument. To właśnie musiałem zrobić, aby obsługiwać IronPython dla AvalonEdit, którego jeszcze nie zaimplementowałem.

Wszystko co potrzebne do obsługi edytora IronPython w scintilla był SciLexer.dll w ścieżce wyszukiwania i montaż Scintilla.net i następująca konfiguracja:

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); 
    } 

Dla AvalonEdit trzeba załadować zewnętrznego wyróżnienia plik, możesz zobaczyć post na blogu this, aby uzyskać więcej informacji. Więc jeśli chcesz podstawy (podświetlanie, składanie dla Pythona + C#), mój wniosek jest taki, że schintilla jest łatwiejsza i działa lepiej. Chociaż z AvalonEdit możesz w końcu zrobić więcej, jeśli chcesz włożyć wysiłek i opanować krzywą uczenia się. W tej chwili używam Scintilla jako mojego stabilnego edytora i eksperymentuję z Avalonem jako dowód koncepcji. Być może będę również tworzyć nowe opinie, ponieważ dowiem się więcej o edytorze.

Powodzenia

+0

Dzięki Andre. Jest to bardzo pomocne – Bhuvan

+6

@Andre, Czy nadal będziesz odpowiadać dzisiaj (prawie 2 lata później)? – Goswin

+0

Tak, chciałbym również odpowiedzieć na pytanie @ Goswina. – gideon

Powiązane problemy