private void ShowPluginWindow(xBimXplorerPluginWindow PluginWindow)
        {
            if (PluginWindow is UserControl)
            {
                // preparing user control
                UserControl uc = PluginWindow as UserControl;
                uc.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
                uc.VerticalAlignment   = System.Windows.VerticalAlignment.Stretch;
                //set data binding
                PluginWindow.BindUI(MainWindow);

                // add into UI
                if (PluginWindow.DefaultUIContainer == PluginWindowDefaultUIContainerEnum.LayoutDoc)
                {
                    // layout document mode
                    LayoutDocument ld = new LayoutDocument();
                    ld.Title   = PluginWindow.WindowTitle;
                    ld.Content = uc;
                    MainDocPane.Children.Add(ld);
                }
                else if (PluginWindow.DefaultUIContainer == PluginWindowDefaultUIContainerEnum.LayoutAnchorable)
                {
                    LayoutAnchorablePaneGroup pg  = GetRightPane();
                    LayoutAnchorablePane      lap = new LayoutAnchorablePane();
                    pg.Children.Add(lap);
                    LayoutAnchorable ld = new LayoutAnchorable();
                    ld.Title   = PluginWindow.WindowTitle;
                    ld.Content = uc;
                    lap.Children.Add(ld);
                }
            }
        }
        internal void LoadPlugin(string fullAssemblyName)
        {
            Debug.WriteLine(string.Format("Attempting to load: {0}", fullAssemblyName));
            if (!File.Exists(fullAssemblyName))
            {
                return;
            }
            var ContPath = Path.GetDirectoryName(fullAssemblyName);

            AssemblyLoadFolder = ContPath;

            var assembly = Assembly.LoadFile(fullAssemblyName);

            foreach (var refReq in assembly.GetReferencedAssemblies())
            {
                //check if the assembly is loaded
                Assembly[] asms     = AppDomain.CurrentDomain.GetAssemblies();
                bool       reqFound = false;
                foreach (Assembly asm in asms)
                {
                    AssemblyName asmName = asm.GetName();
                    if (asmName.FullName.Equals(refReq.FullName))
                    {
                        reqFound = true;
                        break;
                    }
                    else if (asmName.Name.Equals(refReq.Name))
                    {
                        Debug.WriteLine(string.Format("Versioning issues: \r\na -> {0} \r\nb -> {1}", refReq.FullName, asmName.FullName));
                    }
                }
                ;
                if (!reqFound)
                {
                    Debug.WriteLine(string.Format("Will need to load: {0}", refReq.FullName));
                    AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
                    Assembly.Load(refReq);
                    AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
                }
            }

            var UserControls = assembly.GetTypes().Where(x => x.BaseType == typeof(UserControl));

            foreach (var tp in UserControls)
            {
                Debug.WriteLine("Looping " + tp.Name);
                object instance = Activator.CreateInstance(tp);
                xBimXplorerPluginWindow asPWin = instance as xBimXplorerPluginWindow;
                if (asPWin != null)
                {
                    if (!PluginWindows.Contains(asPWin))
                    {
                        ShowPluginWindow(asPWin);
                        PluginWindows.Add(asPWin);
                    }
                }
            }
        }