Как поймать мышь влево, если шаблон данных имеет прозрачный фон? - PullRequest
3 голосов
/ 25 августа 2009

Мой DataTemplate выглядит так:

<DataTemplate x:Key="ItemTemplate">
<StackPanel MouseLeftButtonDown="StackPanel_MouseLeftButtonDown">

Однако я не могу поймать левую кнопку мыши. Если я настрою фон шаблона на какой-нибудь цвет, это нормально.

Как создать прозрачный DataTemplate и перехватить событие MouseLefButtonDown?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 25 августа 2009

Если вы хотите отлавливать события мыши на самой StackPanel, вам просто нужно установить кисть фона на прозрачный:

<StackPanel MouseLeftButtonDown="StackPanel_MouseLeftButtonDown"
        Background="Transparent" Height="400" Width="400" >
<Button Content="dfsdf"/> 

1 голос
/ 25 августа 2009

MouseLeftButtonDown - это пузырящееся событие. Это означает, что он сначала стреляет на самом глубоком возможном уровне, а затем «пузырится» вверх через логическое дерево. Если у вас есть контент, содержащийся в вашем StackPanel, который обрабатывает MouseLeftButtonDown, то вы никогда не увидите всплывающее событие и, следовательно, оно никогда не достигнет вашего StackPanel.

PreviewMouseLeftButtonDown, с другой стороны, является событием туннелирования. Это означает, что сначала он будет запускаться в контейнере верхнего уровня, а затем «туннелировать» вниз через логическое дерево, пока не достигнет самого низкого уровня. Попробуйте изменить ваше мероприятие на:

<StackPanel PreviewMouseLeftButtonDown="StackPanel_PreviewMouseLeftButtonDown">

И посмотри, сможешь ли ты поймать его.

...