2010-03-29 11 views
6

Tengo un adorno que adorna un borde (vea la captura de pantalla a continuación). Sin embargo, el evento MouseDown para Adorner solo se levanta cuando se hace clic en un elemento del adorno. Necesito que se levante el Evento MouseDown, al hacer clic en cualquier lugar del adorno encima del elemento adornado. ¿Cómo puede hacerse esto? ¿Tengo que agregar un control transparente en el adorno o hay otra forma de hacerlo? ¡Gracias por cualquier ayuda!WPF: Adorner Hit Testing/MouseDown Evento

pantalla y VS 2008 Proyecto: http://cid-0432ee4cfe9c26a0.skydrive.live.com/browse.aspx/%C3%96ffentlich?uc=2

El Código para la adorner:

class myAdorner : Adorner 
{ 
    public myAdorner(UIElement element) 
     : base(element) 
    { 
     this.MouseDown += new System.Windows.Input.MouseButtonEventHandler(myAdorner_MouseDown); 
    } 


    void myAdorner_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) 
    { 
     MessageBox.Show("ok"); 
    } 


    // Draws two rectangles: one in the upper-left and another one in the lower-right corner 
    protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) 
    { 
     Size size = this.AdornedElement.RenderSize; 

     Rect r1 = new Rect(0.5, 0.5, 20, 20); 
     Rect r4 = new Rect(size.Width - 20.5, size.Height - 20.5, 20, 20); 


     SolidColorBrush brush = new SolidColorBrush(Colors.AliceBlue); 
     Pen pen = new Pen(Brushes.Black, 1); 

     drawingContext.DrawRectangle(brush, pen, r1); 
     drawingContext.DrawRectangle(brush, pen, r4); 
    } 
} 

Respuesta

3

Cuando he hecho esto en el pasado, siempre he usado un recipiente transparente. No es suficiente tener un Pincel nulo; realmente necesita usar color # 00000000 (o algún otro color alfa 0). Puede desactivar IsHitTestVisible para los elementos dentro del contenedor para que el contenedor reciba todos los eventos del mouse hacia abajo.

+0

gracias por su respuesta, pero ¿cómo se establece un pincel en un adorno? ¿dibujarcontexto y rellenar todo el rendersize? –

+0

ok, lo obtuve (solo use drawingcontext para dibujar un rectángulo transparente, nada especial) ¡y funciona bien! ¡muchas gracias! Todavía me pregunto si realmente necesitas un rectángulo extra para esto. de todos modos, ahora solo funciona. –

1

El problema es que su adorner solo puede levantar eventos del mouse donde hay elementos visibles en su adorno ... los dos cuadrados en la esquina.

Si desea escuchar los eventos de mouse en todo el elemento que está adornando, debe registrar AdornedElement.PreviewMouseDown Esto le dará a su adornador la oportunidad de hacer su trabajo antes de que el evento MouseDown se dispare por el elemento adornado.

+0

hola mike, lo intenté y para mí no está funcionando? –