c# - mouseenter - visual basic mouse move
No se puede controlar PreviewMouseDown (1)
Oye; Tengo la siguiente jerarquía visual en un control de usuario:
Grid -> Canvas -> MyContentControl
MyContentControl es una clase derivada de ContentControl que tiene un adorno en la parte superior que es un rectángulo, esto es para que sea más fácil hacer clic en ciertos objetos (aumentar el área de prueba de golpes). El adorno está presente en todo momento, pero con fondo transparente.
Me gustaría ver los eventos PreviewMouseDown levantados cuando hago clic en MyContentControl desde el código de control del usuario, pero el evento no parece estar allí, solo en el nivel adorner.
El evento se maneja en el nivel adorner, pero e.IsHandled no está configurado en verdadero, por lo que debe continuar burbujeando o haciendo un túnel. Por lo que leí, PreviewMouseDown está haciendo túneles, y IIRC, debería haberse levantado primero en el control de usuarios.
¿Me estoy perdiendo de algo?
Gracias.
Dada la estructura que describiste, el árbol visual real se verá más o menos así:
Window
-> Grid
-> Canvas
-> MyContentControl
-> AdornerLayer
-> MyContentControlAdorner
Como puede ver, su adornador ( MyContentControlAdorner
) se encuentra en la rama diferente del árbol que su control personalizado. Esto se debe a que los adornos se colocan dentro de un elemento especial llamado AdornerLayer
. Tal AdornerLayer
generalmente se encuentra directamente dentro del elemento de nivel superior (como Window
o Page
).
Por lo tanto, teniendo en cuenta todo eso, debe quedar claro que si se produce un evento en el adornador, lo hará por la siguiente ruta: Window -> AronerLayer -> MyContentControlAdorner
.
Dicho esto, no puede manejar un evento de mouse en dos elementos que se encuentran en diferentes subárboles (aunque se colocan uno encima de otro).