typeparam - summary definition c#
El elemento especificado ya es el hijo lógico de otro elemento. Desconecte primero (4)
Guillaume
Puede intentar usar adicionalmente el método RemoveVisualChild después de RemoveLogicalChild :
this.RemoveLogicalChild(element);
this.RemoveVisualChild(element);
PublishFrameworkElement(element, stream);
Espero que esto ayude, Piotr.
Aquí está el error que tengo cuando quiero adjuntar un FrameworkElement a una nueva ventana para publicarlo en un archivo PNG.
Así que mi idea es eliminar el enlace padre-hijo, llamar a mi método y agregar al niño nuevamente con este código:
this.RemoveLogicalChild(element);
PublishFrameworkElement(element, stream);
this.AddLogicalChild(element);
Pero tengo exactamente el mismo error ...
Miré muchas preguntas sobre este error, aquí en SO, pero ninguna respondió a mi problema ¿Qué me estoy perdiendo?
EDITAR: aquí está el código que me funcionó:
var element = _GeneratedContent as FrameworkElement;
var ParentPanelCollection = (element.Parent as Panel).Children as UIElementCollection;
ParentPanelCollection.Clear();
FileStream stream = [...]
if (element != null)
{
PublishFrameworkElement(element, stream);
ParentPanelCollection.Add(element);
}
stream.Close();
Pregunta antigua, pero no tuve suerte con las otras respuestas, así que hice un método de extensión para eliminar el elemento de su padre.
public static class FrameworkElementHelper
{
public static void RemoveFromParent(this FrameworkElement item)
{
if (item != null)
{
var parentItemsControl = (ItemsControl)item.Parent;
if (parentItemsControl != null)
{
parentItemsControl.Items.Remove(item as UIElement);
}
}
}
}
Si element
es el element
secundario de un Panel (por ejemplo, Grid), debe eliminarlo de la colección Children del Panel. Si se establece como Content
de un ContentControl
, tendría que establecer ese Contenido en nulo (o cualquier otra cosa que no sea un element
).
Tuve un problema similar pero ligeramente diferente pero recibí el mismo mensaje de error. Hice una solución al hacer una clase heredada y llamar a RemoveLogicalChild (ya que este es un método protegido).
public partial class PopupWindow : Window
{
public PopupWindow()
{
InitializeComponent();
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
this.RemoveLogicalChild(this.Content); // since protected method
}
}
Funciono para mi Hice un ejemplo simple que puedes ver aquí.
http://wpfgrid.blogspot.com/2013/01/wpf-error-specified-element-is-already.html