2011-11-03 70 views
10

Tôi đã tạo một số canvas với nền trong suốt và muốn thực hiện một số sự kiện di chuyển trên đó.Sự kiện chuột trên nền trong suốt

Tuy nhiên, tôi nhận thấy rằng tất cả sự kiện chuột (ví dụ: MouseLeftButtonDown) không thể hoạt động của nền của canvas là Null hoặc Transparent. Nhưng nếu tôi thiết lập nền cho một số màu sắc rắn (nói, màu đỏ hoặc màu xanh), các chức năng sự kiện chuột tốt.

Tại sao?

Tôi có thể đặt chức năng sự kiện chuột đúng cách với nền trong suốt không?

Cảm ơn bạn!

Trả lời

25

Tôi không chắc chắn tại sao bạn nhận được kết quả bạn nhận được nhưng nó sẽ hoạt động tốt khi nền trong suốt (nghĩa là bạn đặt rõ ràng là Brushes.Transparent, thông qua XAML hoặc mã). Nếu nó là null, WPF sẽ không bao gồm nó trong thử nghiệm hit, và do đó nó sẽ không đủ điều kiện cho các sự kiện chuột.

Xem ví dụ: http://msdn.microsoft.com/en-us/library/ms752097.aspx (Một đối tượng thị giác mà là trong suốt cũng có thể được nhấn thử nghiệm.)

Nhiều khả năng bạn có một UIElement trong cây yếu tố của bạn cũng được chụp and handling sự kiện chuột trước giá vẽ của bạn nhìn thấy nó (tức là bằng cách thiết lập e.Handled đến true)

+0

Cảm ơn, giải pháp thực sự là đặt rõ ràng Background = "Transparent" cho StackPanel của tôi. – Borzh

13

Transparent KHÔNG phản ứng với các sự kiện chuột, đó là toàn bộ điểm của nó, bạn có chắc chắn rằng bạn thậm chí còn chạm vào canvas không?

Dưới đây là một XAML chỉ dụ:

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

Nếu bạn đặt Background để null, hoặc explicity hoặc ngầm bằng cách loại bỏ các tài sản đó sẽ không còn phản ứng.

7

Lưu ý rằng có sự khác biệt trong việc đặt nền thành trong suốt thay vì không đặt nó (hoặc đặt thành rỗng). Kinh nghiệm của tôi là thử nghiệm hit hoạt động trên nền trong suốt, nhưng không phải trên nền trống.

Các vấn đề liên quan