How can I add this WPF control into my WinForm?

后端 未结 3 1842
一向
一向 2020-12-24 14:15

I know that I must use an ElementHost to display a WPF control in a WinForm, but as the WPF control is third party software and it only comes with an XML file a

相关标签:
3条回答
  • 2020-12-24 14:51

            ElementHost host = new ElementHost();
            host.Size = new Size(200, 100);
            host.Location = new Point(100, 100);
    
            ICSharpCode.AvalonEdit.TextEditor edit = new 
            ICSharpCode.AvalonEdit.TextEditor();
    
            host.Child = edit;
    
            this.Controls.Add(host);
    
    0 讨论(0)
  • 2020-12-24 14:53

    If you want to be able to set the hosted content at design time the control needs to be part of your solution. One way to achieve that is to create a custom WPF user control which contains the AvalonEdit component you want to use. I.e

    1. Create a WPF User Control library project and create a user control containing the AvalonEdit component.

    2. Add the User control project to your Winforms solution.

    Now you should be able to select your new user control as the hosted content.

    Or you could add the AvalonEdit control directly in code like this:

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

    Not sure what the control is called so replace the AvalonEditControl as appropriate.

    0 讨论(0)
  • 2020-12-24 15:10
    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);
    }
    
    0 讨论(0)
提交回复
热议问题