Как я могу добавить этот элемент управления WPF в свою WinForm? - программирование

Как я могу добавить этот элемент управления WPF в свою WinForm?

Я знаю, что я должен использовать ElementHost для отображения элемента управления WPF в WinForm, но поскольку элемент управления WPF является сторонним программным обеспечением, и он поставляется только с XML файлом и DLL файлом.

Элемент управления AvalonEdit, я добавил файлы ICSharpCode.AvalonEdit.xml и ICSharpCode.AvalonEdit.dll к моему и я пошел в Project -> Add Reference и добавил DLL в качестве ссылки. Теперь я могу получить доступ к пространству имен ICSharpCode в моем коде, все классы и методы разоблачены, но с этого момента я не уверен, как использовать элемент управления в моей WinForm.

Я ожидал, что элемент управления WPF появится в обозревателе решений, но это не так. Я попытался добавить элемент управления ElementHost в свою WinForm в любом случае, но когда я пытаюсь выбрать Hosted Content, никаких элементов управления не отображаются, поэтому он не знает о моем WPF-элементе управления. Как я могу использовать элемент управления AvalonEdit WPF в своей WinForm?

4b9b3361

Ответ 1

Если вы хотите установить размещенный контент во время разработки, элемент управления должен быть частью вашего решения. Одним из способов достижения этого является создание пользовательского пользовательского элемента управления WPF, который содержит компонент AvalonEdit, который вы хотите использовать. I.e

  • Создайте проект библиотеки пользовательского элемента управления 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 соответствующим образом.

Ответ 2

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