Я создаю конструктор поверхностей (аналогичный Visual Studio Designer) и среду выполнения.В конструкторе все на 100%.Я сериализирую все элементы управления дизайнера и десериализованные элементы управления в среду выполнения, но элементы управления все еще содержат TargetWindow конструктора.Основная проблема заключается в том, что среда выполнения все еще поддерживает эффекты конструктора из-за TargetWindow.
Я попытался отразить изменение самого свойства, но это создает странные эффекты.Я пытался создать элементы управления и скопировать все свойства, но это не копирует все свойства, такие как дочерние элементы управления и т. Д.
//Example of creating the properties to a new control
var ts = Assembly.Load(cont.GetType().Assembly.FullName);
var o = ts.GetType(cont.GetType().FullName);
Control controlform = (Control)Activator.CreateInstance(o);
PropertyInfo[] controlProperties = cont.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo propInfo in controlProperties)
{
if (propInfo.CanWrite)
{
if (propInfo.Name != "Site" && propInfo.Name != "WindowTarget")
propInfo.SetValue(controlform, propInfo.GetValue(cont, null), null);
else
{
}
}
}
//Example of creating trying to change the property directly with reflection.
var ts = Assembly.Load(cont.GetType().Assembly.FullName);
var o = ts.GetType(cont.GetType().FullName);
Control controlform2 = (Control)Activator.CreateInstance(o);
Control controlform = cont;
controlform.Site = null;
if (controlform.Parent == null)
controlform.Parent = this;
PropertyInfo[] controlProperties = controlform.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo propInfo in controlProperties)
{
if (propInfo.CanWrite)
{
if (propInfo.Name == "WindowTarget")
propInfo.SetValue(controlform, propInfo.GetValue(temp), null);
else
{
}
}
}
Я думаю, что должен быть более простой способ изменить TargetWindow.свойство или изменить элемент управления от времени разработки до времени выполнения.