代码中的AvalonEdit更改语法突出显示

Kar*_*ann 10 c# wpf syntax-highlighting text-editor avalonedit

我想在我的代码中更改AvalonEdit的语法突出显示.

XAML:

 <avalonEdit:TextEditor Name="textEditor" SyntaxHighlighting="{Binding syntaxHighlighting}" />
Run Code Online (Sandbox Code Playgroud)

C#:

public string syntaxHighlighting { get; set; }

public MainWindow()
{
     InitializeComponent();
     syntaxHighlighting = "C#";
     DataContext = this;
}
Run Code Online (Sandbox Code Playgroud)

但语法高亮不会改变.我究竟做错了什么?对我的问题有更好的解决方案吗?

use*_*814 31

ICSharpCode.AvalonEdit.Highlighting.HighlightingManager.Instance.GetDefinition("C#");
Run Code Online (Sandbox Code Playgroud)

  • `ICSharpCode.AvalonEdit.Highlighting.HighlightingManager.Instance.GetDefinitionByExtension(Path.GetExtension(FileName));` (2认同)

Jer*_*son 6

干得好:

ICSharpCode.AvalonEdit.TextEditor textEditor = new ICSharpCode.AvalonEdit.TextEditor();
textEditor.ShowLineNumbers = true;
string dir = @"C:\Program Files\MyFolder\";
#if DEBUG
dir = @"C:\Dev\Sandbox\SharpDevelop-master\src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\Highlighting\Resources\";
#endif

Stream xshd_stream = File.OpenRead(dir + "CSharp-Mode.xshd");
XmlTextReader xshd_reader = new XmlTextReader(xshd_stream);
textEditor.SyntaxHighlighting = ICSharpCode.AvalonEdit.Highlighting.Xshd.HighlightingLoader.Load(xshd_reader, ICSharpCode.AvalonEdit.Highlighting.HighlightingManager.Instance);
xshd_reader.Close();
xshd_stream.Close();
Run Code Online (Sandbox Code Playgroud)

编辑:

由于ICSharp.TextEditor在WinForms中抛出AccessViolations,我在WinForms中使用AvalonEdit:

ElementHost host = new ElementHost();
host.Size = new Size(200, 100);
host.Location = new Point(100, 100);
host.Child = textEditor;
this.Controls.Add(host);
Run Code Online (Sandbox Code Playgroud)