Событие мыши на прозрачном фоне

Я создал несколько холстов с прозрачным фоном и хочу сделать какое-то событие переноса на нем.

Однако я обнаружил, что все события мыши (например, MouseLeftButtonDown) не могут функционировать на фоне холста Null или Transparent. Но если я устанавливаю фон на какой-то сплошной цвет (например, красный или синий), функция события мыши хорошо.

Почему?

Могу ли я сделать функцию события мыши правильно с прозрачным фоном?

Спасибо!

Ответ 1

Я не уверен, почему вы получаете результаты, которые вы получаете, но он должен работать нормально, когда фон прозрачен (т.е. вы явно задали его Brushes.Transparent, либо через XAML, либо в коде). Если он равен нулю, WPF не будет включать его в тестовое тестирование, и, следовательно, он не будет иметь право на события мыши.

См. http://msdn.microsoft.com/en-us/library/ms752097.aspx (визуальный объект, который является прозрачным, также может быть подвергнут испытанию).

Скорее всего, у вас есть еще один UIElement в дереве элементов, который захватывает и обрабатывает событие мыши, прежде чем ваш холст увидит его (то есть, установив e.Handled to true)

Ответ 2

Transparent Влияет ли мы на события мыши, что все это означает, что вы даже попали в холст?

Здесь пример 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>

Если вы установите Background на null, либо эксплицитно, либо неявно, удалив свойство, он больше не будет реагировать.

Ответ 3

Обратите внимание, что существует разница в настройке фона на прозрачность, а не на его установку (или на установление нулевого значения). Мой опыт заключается в том, что тестирование ударов работает на прозрачном, но не на нулевом фоне.