The basics
Specific using:using System.IO; using System.Reflection; using System.Xml; //only for "the not so basic"As you can see, none of them concerns AvanlonEdit...
When to Load :
String AvalonEditDllName = "ICSharpCode.AvalonEdit.dll"; if ( File.Exists(AvalonEditDllName) ) {/*...*/}
How to load:
Assembly u = Assembly.LoadFile(Path.GetFullPath(AvalonEditDllName));
What to instanciate:
Type tAvalonEditTextEditor = u.GetType("ICSharpCode.AvalonEdit.TextEditor"); if ( tAvalonEditTextEditor != null ) {/*...*/}
How to instanciate:
System.Windows.UIElement aeui = (System.Windows.UIElement)Activator.CreateInstance(tAvalonEditTextEditor);
From now, you can use your System.Windows.UIElement in your WPF form just like this:
MainGrid.Children.Add(aeui);where MainGrid is, for example, a System.Windows.Controls.Grid.
The basics of properties
Do you want line numbers ?First let's look for the property of the type :
PropertyInfo propShowLineNumbers = tAvalonEditTextEditor.GetProperty("ShowLineNumbers");Then let's make the property true :
propShowLineNumbers.SetValue(aeui, true, null);
The not so basic of properties
And what about syntax hihgligting ?? Good question indeed !Some more types and properties:
Type tAvalonEditHightingLoader = u.GetType("ICSharpCode.AvalonEdit.Highlighting.Xshd.HighlightingLoader"); Type tAvalonEditHightingManager = u.GetType("ICSharpCode.AvalonEdit.Highlighting.HighlightingManager"); PropertyInfo propSyntaxHighlighting = tAvalonEditTextEditor.GetProperty("SyntaxHighlighting"); PropertyInfo spropAEHMInstance = tAvalonEditHightingManager.GetProperty("Instance");
And the loading himself (I try to keep the variables consistant with the previous pieces of code):
String XshdFileName = "t-sql.xshd"; using ( XmlTextReader reader = new XmlTextReader(XshdFileName) ) { propSyntaxHighlighting.SetValue( //let's set the property of the text editor aeui, tAvalonEditHightingLoader.InvokeMember( "Load", //by loading the xshd file with HightingLoader.Load BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.InvokeMethod, null, null, //with the following parameters new Object[] { reader, spropAEHMInstance.GetValue(null, null) } //one of them being the static property //HighlightingManager.Instance ), null ); }