Мышь на прозрачном фоне - PullRequest
10 голосов
/ 03 ноября 2011

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

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

Почему?

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

Спасибо!

Ответы [ 3 ]

28 голосов
/ 03 ноября 2011

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

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

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

13 голосов
/ 03 ноября 2011

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, либо явным, либо неявным образом, удалив свойство, на которое оно больше не будет реагировать.

7 голосов
/ 03 ноября 2011

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

...