Как добавить этот элемент управления WPF в WinForm?
Я знаю, что должен использовать ElementHost
для отображения элемента управления WPF в WinForm, но поскольку элемент управления WPF является сторонним программным обеспечением, он поставляется только с XML-файлом и DLL-файлом.
управление AvalonEdit, я добавил Как ICSharpCode.AvalonEdit.xml
и ICSharpCode.AvalonEdit.dll
файлы в мой проект, и я пошел к Project -> Add Reference
и добавил DLL в качестве ссылки. Теперь я могу получить доступ к ICSharpCode
пространство имен в моем коде представлены все классы и методы, но с этого момента я не уверен, как фактически используйте элемент управления в моей WinForm.
Я ожидал, что элемент управления WPF появится в обозревателе решений, но это не так. Я попытался добавить ElementHost
управление моей WinForm в любом случае, но когда я пытаюсь выбрать размещенный контент, элементы управления не отображаются, поэтому он не знает о моем элементе управления WPF. Как я могу использовать элемент управления AvalonEdit WPF в моей WinForm?
2 ответов
Если вы хотите установить размещенный контент во время разработки, элемент управления должен быть частью вашего решения. Один из способов добиться этого-создать пользовательский элемент управления WPF, содержащий компонент AvalonEdit, который вы хотите использовать. И. Е
создайте проект библиотеки пользовательских элементов управления WPF и создайте пользовательский элемент управления содержащий компонент AvalonEdit.
добавьте проект пользовательского элемента управления в Winforms решение.
теперь вы сможете выбрать новый пользовательский элемент управления в качестве размещенного содержимого.
или вы можете добавить элемент управления AvalonEdit непосредственно в такой код:
public Form1()
{
InitializeComponent();
ElementHost host= new ElementHost();
host.Size = new Size(200, 100);
host.Location = new Point(100,100);
AvalonEditControl edit = new AvalonEditControl();
host.Child = edit;
this.Controls.Add(host);
}
Не уверен, что элемент управления называется, поэтому замените AvalonEditControl соответствующим образом.
public Form1()
{
InitializeComponent();
ICSharpCode.AvalonEdit.TextEditor textEditor = new ICSharpCode.AvalonEdit.TextEditor();
textEditor.ShowLineNumbers = true;
textEditor.FontFamily = new System.Windows.Media.FontFamily("Consolas");
textEditor.FontSize = 12.75f;
string dir = @"C:\Temp\";
#if DEBUG
dir = @"C:\Dev\Sandbox\SharpDevelop-master\src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\Highlighting\Resources\";
#endif
if (File.Exists(dir + "CSharp-Mode.xshd"))
{
Stream xshd_stream = File.OpenRead(dir + "CSharp-Mode.xshd");
XmlTextReader xshd_reader = new XmlTextReader(xshd_stream);
// Apply the new syntax highlighting definition.
textEditor.SyntaxHighlighting = ICSharpCode.AvalonEdit.Highlighting.Xshd.HighlightingLoader.Load(xshd_reader, ICSharpCode.AvalonEdit.Highlighting.HighlightingManager.Instance);
xshd_reader.Close();
xshd_stream.Close();
}
//Host the WPF AvalonEdiot control in a Winform ElementHost control
ElementHost host = new ElementHost();
host.Dock = DockStyle.Fill;
host.Child = textEditor;
this.Controls.Add(host);
}