2011-11-03 26 views
10

Ho creato diverse tele con sfondo trasparente e voglio fare qualche evento di spostamento su di esso.Evento del mouse su sfondo trasparente

Tuttavia, ho trovato che tutti gli eventi del mouse (ad esempio MouseLeftButtonDown) non possono funzionare sullo sfondo del canvas è Null o Transparent. Ma se imposto lo sfondo su un colore solido (ad esempio, rosso o blu), l'evento del mouse funziona bene.

Perché?

È possibile che l'evento del mouse funzioni correttamente con uno sfondo trasparente?

Grazie!

risposta

25

Non sono sicuro del motivo per cui ottieni i risultati, ma dovrebbe funzionare correttamente quando lo sfondo è trasparente (ad esempio, lo si imposta esplicitamente su Brushes.Transparent, tramite XAML o codice). Se è nullo, WPF non lo includerà in hit test e quindi non sarà idoneo per gli eventi del mouse.

Vedere ad es. http://msdn.microsoft.com/en-us/library/ms752097.aspx (un oggetto visivo che sia trasparente può anche essere colpito prova.)

Molto probabilmente si dispone di un'altra UIElement nel vostro albero elemento che sta catturando and handling l'evento del mouse prima della tela lo vede (cioè impostando e.Handled a true)

+0

Grazie, la soluzione in effetti era impostare in modo esplicito Background = "Transparent" per il mio StackPanel. – Borzh

13

Transparent Reagisce agli eventi del mouse, questo è il punto, sei sicuro di aver colpito anche la tela?

Ecco un esempio XAML-only:

<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> 

Se si imposta la Background a null, né esplicitamente né implicitamente rimuovendo la proprietà reagire sarà più.

7

Si noti che c'è una differenza nell'impostazione dello sfondo a trasparente invece di non impostarlo (o impostarlo su null). La mia esperienza è che hit-testing funziona su trasparente, ma non su uno sfondo nullo.