2011-11-03 10 views
10

He creado varios lienzos con fondo transparente y quiero hacer algún evento de movimiento en él.Evento de mouse en fondo transparente

Sin embargo, he encontrado que todos los eventos del mouse (por ejemplo, MouseLeftButtonDown) no pueden funcionar con el fondo del lienzo como nulo o transparente. Pero si configuro el fondo en un color sólido (por ejemplo, rojo o azul), el evento del mouse funciona bien.

¿Por qué?

¿Puedo hacer que el evento del mouse funcione correctamente con fondo transparente?

Gracias!

Respuesta

25

No estoy seguro de por qué obtiene los resultados que obtiene, pero debería funcionar bien cuando el fondo es transparente (es decir, lo establece explícitamente en Brushes.Transparent, ya sea a través de XAML o código). Si es nulo, WPF no lo incluirá en la prueba de impacto, y por lo tanto no será elegible para los eventos del mouse.

Véase p. http://msdn.microsoft.com/en-us/library/ms752097.aspx (un objeto visual que es transparente también puede ser golpeado prueba.)

más probable es que tiene otro UIElement en su árbol de elementos que está capturando and handling el evento del ratón antes de su lienzo lo ve (es decir, mediante el establecimiento de e.Handled a true)

+0

Gracias, la solución de hecho fue configurar explícitamente Fondo = "Transparente" para mi StackPanel. – Borzh

13

Transparent HACE reaccionar a los eventos del mouse, ese es el punto, ¿estás seguro de que incluso estás golpeando el lienzo?

Aquí está un ejemplo de sólo XAML:

<Border Width="300" Height="300" BorderBrush="Black" BorderThickness="1"> 
    <Canvas Background="Transparent"> 
     <Canvas.Triggers> 
      <EventTrigger RoutedEvent="Canvas.MouseLeftButtonDown"> 
       <BeginStoryboard> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background"> 
          <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Brushes.Red}"/> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Canvas.Triggers> 
    </Canvas> 
    </Border> 

Si se establece el Background a null, ya sea explícita o implícitamente mediante la eliminación de la propiedad ya lo hará sin reaccionar.

7

Tenga en cuenta que existe una diferencia al establecer el fondo en transparente en lugar de no configurarlo (o establecerlo en nulo). Mi experiencia es que las pruebas de éxito funcionan en un entorno transparente, pero no nulo.