Событие мыши на прозрачном фоне
Я создал несколько холстов с прозрачным фоном и хочу сделать какое-то событие переноса на нем.
Однако я обнаружил, что все события мыши (например, 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
Обратите внимание, что существует разница в настройке фона на прозрачность, а не на его установку (или на установление нулевого значения). Мой опыт заключается в том, что тестирование ударов работает на прозрачном, но не на нулевом фоне.