ورود

View Full Version : سوال: لود کردن گرید پنل در 2 پروژه مجزا



arman_Delta2002
یک شنبه 20 خرداد 1397, 15:07 عصر
با سلام
من برنامه ای رو به صورت پلاگینی نوشتم
به این صورت که در پلاگین ام یک گرید پنل دارم داخلش کد ها و اشیاء رو چیندم حالا تو پروژه دیگه ای به یک گرید پنل اد کنترل که میکنم خطا زیر رو میده

"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(IPlugi n.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);


خطا اخر کد خطای فوق رو میده

arman_Delta2002
دوشنبه 21 خرداد 1397, 21:15 عصر
پاسخ اش رو پیدا کردم


/// <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
}