visual una tiempo que manejo lista librería eventos ejecucion crear biblioteca c# wpf user-controls

c# - tiempo - El evento cargado de un control de usuario WPF se dispara más de una vez



system windows forms (3)

Como se explica en este blog , el evento Loaded se activa cuando se va a renderizar un control (es decir, se agrega al árbol visual).

Hay varios controles que podrían hacer que su control se cargue / descargue varias veces. Por ejemplo, el nativo WPF TabControl solo representa el contenido de la pestaña seleccionada. Entonces, cuando selecciona una nueva pestaña, el contenido de la pestaña previamente seleccionada se descarga. Si vuelve a hacer clic en la pestaña seleccionada anteriormente, su contenido se vuelve a cargar.

Una solución alternativa es usar un valor booleano para marcar si ya ha inicializado su control, como lo sugieren otros. Alternativamente, puedes usar el evento Initialized lugar.

Para implementar un entorno basado en pestañas en WPF , necesitamos convertir nuestros formularios a controles de usuario, sin embargo, al hacer esto, el evento Loaded del control de usuario se llama dos veces .

Mientras buscaba en internet otras personas también señalaron este problema. ¿Cómo podemos asegurarnos de que el evento cargado se llame solo una vez? Porque cuando se llama varias veces, la inicialización de nuestros controles ocurre varias veces.


Establezca una bandera loaded en el evento y, si la bandera ya se ha establecido, no haga nada.


Su controlador de eventos enrutados puede (y debería) eliminarse del gancho Loaded como lo primero que hace.

public class MyClass : Window { public MyClass() { Loaded += MyLoadedRoutedEventHandler; } void MyLoadedRoutedEventHandler(Object sender, RoutedEventArgs e) { Loaded -= MyLoadedRoutedEventHandler; /// ... } };