Как добавить этот элемент управления 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, который вы хотите использовать. И. Е

  1. создайте проект библиотеки пользовательских элементов управления WPF и создайте пользовательский элемент управления содержащий компонент AvalonEdit.

  2. добавьте проект пользовательского элемента управления в 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);
}