title: How to host WPF application in Winform using reflection
body: <p>I have a simple WPF application MyWPF.exe, </p>
  
  <pre><code>namespace MyWPF
  {
       /// &lt;summary&gt;
       /// Interaction logic for MainWindow.xaml
       /// &lt;/summary&gt;
     public partial class MainWindow : Window
     {           
  
      public MainWindow()
      {
          InitializeComponent();
  
      }
  
      private void button1_Click(object sender, RoutedEventArgs e)
      {
       MessageBox.Show("Button is clicked");
      }
    }
  }
  </code></pre>
  
  <p>I want to load this "MainWindow" in my Winform application, I tried like below, I am getting exception when creating instance as <strong>"System.InvalidOperationException: Window must be the root of the tree. Cannot add Window as a child of Visual."</strong> </p>
  
  <pre><code>        String path = @"D:\Test\MyForm\MyWPF\bin\Debug\MyWPF.exe";
          System.Reflection.Assembly myExeApp = System.Reflection.Assembly.LoadFile(path);
          System.Type MyWPFType = myExeApp.GetType("MyWPF.MainWindow");
  
          var MyWPFInstance = (System.Windows.Window)myExeApp.CreateInstance("MyWPF.MainWindow");
  
          ctrlHost = new ElementHost();
          ctrlHost.Dock = DockStyle.Fill;
          ElementHost.EnableModelessKeyboardInterop(MyWPFInstance );
          ctrlHost.Child = MyWPFInstance ;
          this.Controls.Add(ctrlHost);
  </code></pre>
  
  <p>Is it possible or am I missing something? The entire exception is as below,</p>
  
  <pre><code>System.InvalidOperationException: Window must be the root of the tree. Cannot add Window as a child of Visual.
     at System.Windows.Window.OnAncestorChanged()
     at System.Windows.FrameworkElement.OnAncestorChangedInternal(TreeChangeInfo parentTreeState)
     at System.Windows.TreeWalkHelper.OnAncestorChanged(DependencyObject d, TreeChangeInfo info)
     at System.Windows.DescendentsWalker`1.StartWalk(DependencyObject startNode, Boolean skipStartNode)
     at MS.Internal.PrePostDescendentsWalker`1.StartWalk(DependencyObject startNode, Boolean skipStartNode)
     at System.Windows.TreeWalkHelper.InvalidateOnTreeChange(FrameworkElement fe, FrameworkContentElement fce, DependencyObject parent, Boolean isAddOperation)
     at System.Windows.FrameworkElement.ChangeLogicalParent(DependencyObject newParent)
     at System.Windows.FrameworkElement.AddLogicalChild(Object child)
     at System.Windows.Controls.UIElementCollection.AddInternal(UIElement element)
     at System.Windows.Controls.UIElementCollection.Add(UIElement element)
     at System.Windows.Forms.Integration.ElementHost.set_Child(UIElement value)
     at MyForm.Form1.button1_Click(Object sender, EventArgs e) in D:\Test\MyForm\MyForm\Form1.cs:line 37
     at System.Windows.Forms.Control.OnClick(EventArgs e)
     at System.Windows.Forms.Button.OnClick(EventArgs e)
     at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
     at System.Windows.Forms.Control.WmMouseUp(Message&amp; m, MouseButtons button, Int32 clicks)
     at System.Windows.Forms.Control.WndProc(Message&amp; m)
     at System.Windows.Forms.ButtonBase.WndProc(Message&amp; m)
     at System.Windows.Forms.Button.WndProc(Message&amp; m)
     at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp; m)
     at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp; m)
     at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
  </code></pre>