Como alternativa a Al almacenar un indicador booleano, puede usar un método de extensión y delegar el ajuste a falso Loaded
disparando solo una vez.
public static void OnLoadedOnce(
this UserControl control,
RoutedEventHandler onLoaded)
{
if (control == null || onLoaded == null)
{
throw new ArgumentNullException();
}
RoutedEventHandler wrappedOnLoaded = null;
wrappedOnLoaded = delegate(object sender, RoutedEventArgs e)
{
control.Loaded -= wrappedOnLoaded;
onLoaded(sender, e);
};
control.Loaded += wrappedOnLoaded;
}
...
class MyControl : UserControl
{
public MyControl()
{
InitializeComponent();
this.OnLoadedOnce(this.OnControlLoaded /* or delegate {...} */);
}
private void OnControlLoaded(object sender, RoutedEventArgs e)
{
}
}
Bueno, eso es estúpido, no debería tener que usar cláusulas de guardia como esa. Pero es la respuesta correcta, así que este es tu punto. –
De acuerdo: podría crear su propia clase de ventana heredando desde la ventana e implementar un evento en todo su proyecto si es algo que hace con frecuencia. – brendan
También vea esto: http://blogs.msdn.com/b/mikehillberg/archive/2006/09/19/loadedvsinitialized.aspx –