لود کردن گرید پنل در 2 پروژه مجزا
با سلام
من برنامه ای رو به صورت پلاگینی نوشتم
به این صورت که در پلاگین ام یک گرید پنل دارم داخلش کد ها و اشیاء رو چیندم حالا تو پروژه دیگه ای به یک گرید پنل اد کنترل که میکنم خطا زیر رو میده
"Specified element is already the logical child of another element. Disconnect it first."
تمیدونم منظورش چیه اینم کد اد به گیرید پنل
_plugins = new List<IPlugin.ISetting>();
var files = System.IO.Directory.GetFiles("Plugins");
foreach (var filePath in files)
{
if (filePath.Contains(".dll"))
{
var ms = System.IO.File.ReadAllBytes(filePath);
Assembly assmbly = Assembly.Load(ms);
var types = assmbly.GetExportedTypes();
foreach (Type typePlugin in types)
{
if (typePlugin.GetInterfaces().Contains(typeof(IPlugin.ISetting)))
{
object instance = Activator.CreateInstance(typePlugin);
_plugins.Add((IPlugin.ISetting)instance);
}
}
}
}
var lll = _plugins.FirstOrDefault();
uxGroupBox_Main.DataContext = lll.PublicGridContainer;
uxGroupBox_Main.Children.Add( lll.PublicGridContainer);
خطا اخر کد خطای فوق رو میده
نقل قول: لود کردن گرید پنل در 2 پروژه مجزا
پاسخ اش رو پیدا کردم
///<summary>
/// برای لود پلاگین ها در فرم های مورد نظر استفاده میشود
///</summary>
///<param name="parentUiobject">استاک پنل در فرم اصلی یا همان جایی که قرار است پلاگین در آنجا لود شود</param>
///<param name="childUi">پلاگین مورد نظر</param>
public static void LoadUiPlugin(StackPanel parentUiobject, ContentControl childUi)
{
var parent = childUi.Parent;
if (parent != null)
{
ArmanUiHelper.Helper.RemoveUiChild(parent, childUi);
}
parentUiobject.Children.Add(childUi);
}
public static void RemoveUiChild(this DependencyObject parent, UIElement child)
{
var panel = parent as Panel;
if (panel != null)
{
panel.Children.Remove(child);
return;
}
var decorator = parent as Decorator;
if (decorator != null)
{
if (decorator.Child == child)
{
decorator.Child = null;
}
return;
}
var contentPresenter = parent as ContentPresenter;
if (contentPresenter != null)
{
if (contentPresenter.Content == child)
{
contentPresenter.Content = null;
}
return;
}
var contentControl = parent as ContentControl;
if (contentControl != null)
{
if (contentControl.Content == child)
{
contentControl.Content = null;
}
return;
}
// maybe more
}