Sé que cuando registra un objeto para los eventos adjuntos del mouse, tiene fugas de memoria. Es por eso que necesita usar WeakEvent pattern.¿Cómo los controles WPF incorporados administran sus manejadores de eventos a un evento adjunto?
Tengo un problema con este patrón: si quieres usarlo, no puedes definir tu controlador en el código XAML.
Para mí, significa que cada código como este se escapa:
<SomeControl Mouse.MouseDown="MyHandler" />
menos que se quite el controlador de forma explícita en el código (y dudo que cualquiera hace eso). Ahora hay algo que no entiendo:
<Button Click="MyHandler" />
Este código utiliza alguna manera en algún lugar del evento Mouse.MouseDown para detectar un clic en el botón. Investigué un poco con un reflector y descubrí que este evento usa MouseDown de la clase UIElement. Y cuando leo el código de UIElement no entiendo: ¡no hay un WeakEventManager!
¿Alguien puede explicarme cómo UIElement recibe eventos de Mouse.MouseDown sin fugas?
Estoy de acuerdo con usted, sin embargo, el controlador en XAML a un evento adjunto (no hablo de eventos de controles, sino eventos como Mouse.MouseDown) puede tener fugas, porque siempre hay una referencia en él. Internamente, la clase de botón usa Mouse.MouseDown events (UIElement para ser específico) .Y no sé por qué esto no tiene fugas. –
Buen punto. Los eventos adjuntos son referencias externas. –