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

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

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

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

Спасибо.

3
Dusan Kocurek 25 Авг 2009 в 02:00
Технически ваша StackPanel прозрачна, но на самом деле у вас есть фон, установленный как нулевой. Это отличается от установки Background="Transparent", что приведет к тому же виду, но ваша StackPanel будет получать события мыши.
 – 
CodeNaked
9 Авг 2011 в 06:05

2 ответа

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

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

<StackPanel PreviewMouseLeftButtonDown="StackPanel_PreviewMouseLeftButtonDown">

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

1
Charlie 25 Авг 2009 в 05:49

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

<StackPanel MouseLeftButtonDown="StackPanel_MouseLeftButtonDown"
        Background="Transparent" Height="400" Width="400" >
<Button Content="dfsdf"/> 
2
Milan Nankov 25 Авг 2009 в 17:23
Ну это моя проблема. Если фон Transparetn, я не могу получить событие. Если установлено значение «Черный», «Белый» и т. д., я могу получить событие MouseLeftButtonDown. Чтобы лучше объяснить, мне нужен элемент списка с прозрачным фоном, который я могу перетаскивать мышью. Поэтому мне нужно получить MouseLeftButtonDown и запустить операцию перетаскивания.
 – 
Dusan Kocurek
25 Авг 2009 в 18:57