2010-07-07 22 views
8

Tengo un control de pestañas, y cuando el usuario quiera agregarlo, entonces quiero copiar un par de elementos que ya existen (no solo hacer referencia a ellos). Ahora, hasta ahora, he copiado las variables que quiero. Pero en el código de dimensionamiento automático he llegado a ser un recortador, es decir, el elemento copiado se retrasa notablemente detrás del original al cambiar el tamaño de la ventana. Además, no es factible seguir copiando cada elemento que necesito copiar a medida que esa lista crece. ¿Hay algún método que pueda usar que copie un control WPF? En este momento, eso es solo un cuadro de texto y un elemento de tabulación.Copie un control WPF programáticamente

Respuesta

10

Es posible que no entienda bien su pregunta, pero podría crear un UserControl personalizado, y cada vez que necesite agregar un nuevo control, simplemente cree una nueva instancia de ese control y agréguelo a su escena, de esta manera usted puede utilizar DataContext 's para ayudar con el enlace de datos que se puede utilizar desde el mando a su copia:

MyControl newControl = new MyControl { DataContext = controlToCopy.DataContext }; 
myGrid.Children.Add(newControl); 

o similares ...

o usted necesita que sea más dinámico que eso?

+0

Cambiar el DataContext hizo el truco. ¡Gracias! – Puppy

11

yo no puedo decirle qué es lo que estamos tratando de hacer, pero si quieres una nueva instancia idéntica a una instancia de control existente puede utilizar XamlWriter y XamlReader para serializar/deserializar el control:

MyControl copy = XamlReader.Parse(XamlWriter.Save(controlInstance)) as MyControl; 
+2

Esta es una buena solución, pero requerirá mucha personalización (en caso de que utilice atributos vinculantes, StaticResources, X: Name etc.- Por lo tanto, debe ocuparse de los problemas mencionados en estos artículos Limitaciones de serialización de XamlWriter.Save [ http://msdn.microsoft.com/en-us/library/ms754193.aspx] Escrito por XamlWriter [ http://blogs.msdn.com/b/mikehillberg/archive/2006/09/16 /xamlwriter.aspx] – akjoshi

+0

esos enlaces están muertos :( – JobaDiniz

Cuestiones relacionadas