C# 在当前窗口中插入另一个项目

C# 在当前窗口中插入另一个项目,c#,wpf,plugins,reflection,C#,Wpf,Plugins,Reflection,我正在创建一个带有菜单的WPF应用程序,当单击菜单项时,我想在我的窗口(插件)中显示nqueen(另一个项目)。我已在我的当前目录中放置了一个NQueens.dll以供使用。为了实现这一点,我创建了一个assembly对象来加载类,并创建了一个Nqueens.Nqueen实例并调用了这些方法 NQueen项目由一个类NQueen.cs和一个主窗口组成 namespace NQueens { public class NQueen { public static bool berekenQu

我正在创建一个带有菜单的WPF应用程序,当单击菜单项时,我想在我的窗口(插件)中显示nqueen(另一个项目)。我已在我的当前目录中放置了一个NQueens.dll以供使用。为了实现这一点,我创建了一个assembly对象来加载类,并创建了一个Nqueens.Nqueen实例并调用了这些方法

NQueen项目由一个类NQueen.cs和一个主窗口组成

namespace NQueens
{
public class NQueen
{
   public static bool berekenQueens(int Row, int N, bool[,] bord)
   {
       if (Row >= N) return true;  //stopconditie

       for (int Col = 0; Col < N; Col++)
       {
           //Q toevoegen
           bord[Row, Col] = true;

           //Q + Q volgende Row  controleren
           if (bordValidatie(Row, Col, bord, N) && berekenQueens(Row + 1, N, bord))
           {
               return true;
           }

           //Q verwijderen indien niet door controle
           bord[Row, Col] = false;

       }
       return false;
   }

   private static bool bordValidatie(int currentRow, int currentCol, bool[,] currentBord, int N)
   {
       int colstep = 1;
       for (int i = currentRow - 1; i >= 0; i--)
       {
           //rechte lijn 
           if (currentBord[i, currentCol])
               return false;

           //linker diagonaal
           if (currentCol - colstep >= 0)
           {
               if (currentBord[i, currentCol - colstep])
                   return false;
           }
           //rechter diagonaal
           if (currentCol + colstep < N)
           {
               if (currentBord[i, currentCol + colstep])
                   return false;
           }
           colstep += 1;
       }
       return true;
   }
}
}

我不知道现在该怎么办。单击菜单项时,如何在当前窗口中显示NQueen程序

NQueen类应该是任何类型的wpf控件子体。如果它是一个简单的类,它无法与其容器通信。

因此您应该实例化NQueens.MainWindow而不是NQueens.NQueen,并调用Show方法。

顺便说一句,如果您的代码和注释是英语的,这会有所帮助,这里的大多数人不会说荷兰语。NQueens项目可以工作,因此,一些注释或方法是否使用荷兰语并不重要。唯一的问题是在安托弗项目中实施NQueens项目。
namespace NQueens
{
public partial class MainWindow : Window
{
    public int iN { get { return Convert.ToInt32(txtN.Text); } set { txtN.Text = "" + value; } }
    private bool[,] spelbord;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        spelbord = new bool[iN, iN];
        NQueen.berekenQueens(0, iN, spelbord);

        visualise(iN, spelbord);
    }

    private void visualise(int N, bool[,] bord)
    {
        gridTekenen();

        for (int row = 0; row < N; row++)
        {
            for (int col = 0; col < N; col++)
            {
                Rectangle rect = new Rectangle();
                rect.Stretch = Stretch.Fill;

                TextBlock txtB = new TextBlock();

                if (spelbord[row, col])
                {
                    SolidColorBrush mySolidColorBrush = new SolidColorBrush();
                    mySolidColorBrush.Color = Colors.LightGreen;
                    rect.Fill = mySolidColorBrush;

                    txtB.Text = "Q";
                }

                rect.SetValue(Grid.ColumnProperty, col);
                rect.SetValue(Grid.RowProperty, row);

                txtB.SetValue(Grid.ColumnProperty, col);
                txtB.SetValue(Grid.RowProperty, row);

                gridPaneel.Children.Add(rect);
                gridPaneel.Children.Add(txtB);
            }
        }
    }

    private void gridTekenen()
    {
        gridPaneel.ShowGridLines = true;
        int grooteGrid = int.Parse(txtN.Text);

        RowDefinition rowDef;
        ColumnDefinition colDef;


        for (int i = 0; i < grooteGrid; i++)
        {
            rowDef = new RowDefinition();

            GridLengthConverter myGridLengthConverter = new GridLengthConverter();
            GridLength gl1 = (GridLength)myGridLengthConverter.ConvertFromString(150 + "*");
            rowDef.Height = gl1;

            colDef = new ColumnDefinition();
            colDef.Width = gl1;

            gridPaneel.RowDefinitions.Add(rowDef);
            gridPaneel.ColumnDefinitions.Add(colDef);
        }
    }
}
}
private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        // Create an assembly object to load our classes
        string path = System.Environment.CurrentDirectory + "\\NQueens.dll";
        Assembly ass = Assembly.LoadFile(path);
        Console.WriteLine(path);

        Type objType = ass.GetType("NQueens.NQueen");

        // Create an instace of NQueens.NQueen
        var instance = Activator.CreateInstance(objType);

        // public static bool berekenQueens(int Row, int N, bool[,] bord)
        var result = objType.InvokeMember("berekenQueens",BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public,
        null, instance, new object[] {   1, /* Row */ 1, /* N */ new bool[,] { {true,false} } /* bord */
        });

        // private static bool bordValidatie(int currentRow, int currentCol, bool[,] currentBord, int N)
        var result2 = objType.InvokeMember("bordValidatie", BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.NonPublic,
        null, instance, new object[] {   1, /* Row */ 1, /* N */ new bool[,] { {true,false} } /* bord */, 1
        });
    }