2011-11-03 8 views
10

Mam kilka płótn z przezroczystym tłem i chcę zrobić na nim jakieś wydarzenie.Zdarzenie myszy na przezroczystym tle

Jednak odkryłem, że wszystkie zdarzenia myszy (np. MouseLeftButtonDown) nie mogą działać w tle obszaru roboczego o wartości Null lub Transparent. Ale jeśli ustawię tło na jakiś jednolity kolor (powiedzmy czerwony lub niebieski), zdarzenie myszy działa dobrze.

Dlaczego?

Czy mogę poprawnie wykonać funkcję zdarzenia myszy z przezroczystym tłem?

Dziękujemy!

Odpowiedz

25

Nie jestem pewien, dlaczego otrzymujesz wyniki, ale powinien działać poprawnie, gdy tło jest przezroczyste (tj. Jawnie ustawisz je na Brushes.Transparent, albo przez XAML, albo kod). Jeśli wartość jest zerowa, to WPF nie uwzględni jej w testach trafień, a zatem nie będzie kwalifikować się do zdarzeń myszy.

Zobacz np. http://msdn.microsoft.com/en-us/library/ms752097.aspx (wizualny obiekt, który jest przezroczysty można również trafić test.)

Najprawdopodobniej masz inny UIElement w elemencie drzewa, które jest przechwytywanie and handling zdarzenie myszy przed płótnie widzi go (poprzez ustawienie e.Handled to true)

+0

Oczywiście, rozwiązaniem było jawne ustawienie tła = "przezroczysty" dla mojego StackPanel. – Borzh

13

Transparent CZY reagują na zdarzenia myszy, o to w tym wszystkim chodzi, czy jesteś pewien, że uderzasz nawet w płótno?

Oto przykład 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> 

Jeśli ustawisz Background do null albo jawnie lub niejawnie poprzez usunięcie właściwość nie będzie już reagować.

7

Należy zauważyć, że istnieje różnica w ustawianiu tła jako przezroczystego, a nie w jego ustawieniu (lub ustawieniu na wartość null). Z mojego doświadczenia wynika, że ​​testowanie trafień działa na przezroczystym, ale nie zerowym tle.

Powiązane problemy