Pregunta

Soy un poco atascado aquí. i estoy usando una biblioteca DragNDrop que serializa los UiElements arrastrados a través de XamlWriter.Save ().

Ahora estoy tratando de DragNDrop algunas instancias de una clase que se extiende cuadrícula. en el constructor empujo algunos elementos en el árbol visual. el constructor se llama cuando se deserializa el objeto y los elementos se añaden otra vez (y otra vez y otra vez dependiendo de la frecuencia i DragNDrop). tristemente Children.Count me dice que no hay elementos secundarios si puedo recuperar el valor de dentro del constructor. si puedo recuperarlo desde el exterior (por myGrid.Children.Count) me da la cantidad más alta (no deseada).

¿hay alguna otra función que debería utilizar para inicializar los elementos visuales? o cualquier otra forma de prevenir esos duplicados?

gracias y aplausos

No hay solución correcta

Otros consejos

tomó un tiempo, pero me parece haber encontrado una solución.
Ahora soy capaz de crear una clase base que contiene ya los elementos visuales todas las subclases necesitan. y son analizables mediante XamlWriter / lector sin duplicados. whew.

1) se extienden control de usuario (No Agregar-> control de usuario, pero Agregar-> Clase y hereda de forma manual)
2) poner el InitializeControl estándar (); al constructor
3) aplicar InitializeControl () y poner la maquetación, la adición de los niños y lo que allí
4) xamlwrite / xamlread / hereda como un loco

espero que sea útil a alguien y que yo no he supervisado el imprevisto ..

- edit: por supuesto. habrá duplicados, pero nosotros no podemos verlos. después de la XamlReader es a través de los que hay UiElements creados por mi InitializeComponent () y los únicos a quienes xaml-analizada después de eso. Las referencias contenidas en el código consideran los controles creados en código que no son muestran: /

suspiro.

Una forma lejos de ser perfecto en todo esto es poner un interruptor en un controlador de eventos inicializado, así: if(HasContent)
Initialize();
else
Reinitialize();
Multiinitialize();

donde el Initialize () añadiría las UiElements al árbol visual, la Fecha () encuentra a los referencias adecuadas (por control = FindName("controlName")) y el Multiinitialze () recrea los controladores de eventos y lo que más se pierde en el camino throug la XamlReader.

Bueno, ahora usted puede crear una instancia del control de usuario costumbre heredada en XAML, pero no hay una manera fácil de atributos establecidos. esto se debe a la configuración de los atributos que ocurre antes de que el evento iniciado y hay NullPointerExceptions en espera. usted podría evitar que con fijaciones supongo.

Pero tiene que haber una manera más fácil. por favor hágamelo saber!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top