Мой DataTemplate
выглядит так:
<DataTemplate x:Key="ItemTemplate">
<StackPanel MouseLeftButtonDown="StackPanel_MouseLeftButtonDown">
Однако я не могу поймать левую кнопку мыши. Если я установлю фон шаблона на какой-то цвет, все в порядке.
Как создать прозрачный DataTemplate
и перехватить событие MouseLefButtonDown
?
Спасибо.
2 ответа
MouseLeftButtonDown
— всплывающее событие. Это означает, что сначала он срабатывает на самом глубоком уровне, а затем «пузырится» вверх по логическому дереву. Если у вас есть содержимое, содержащееся в StackPanel
, которое обрабатывает MouseLeftButtonDown
, вы никогда не увидите всплывающую подсказку о событии вверх, и, следовательно, оно никогда не достигнет вашего StackPanel
.
PreviewMouseLeftButtonDown
, с другой стороны, является событием туннелирования. Это означает, что сначала он будет запускать контейнер верхнего уровня, а затем «туннелировать» вниз по логическому дереву, пока не достигнет самого нижнего уровня. Попробуйте изменить событие на:
<StackPanel PreviewMouseLeftButtonDown="StackPanel_PreviewMouseLeftButtonDown">
И посмотрите, сможете ли вы поймать его тогда.
Если вы хотите перехватывать события мыши на самой панели StackPanel, вам просто нужно сделать ее фоновую кисть прозрачной:
<StackPanel MouseLeftButtonDown="StackPanel_MouseLeftButtonDown"
Background="Transparent" Height="400" Width="400" >
<Button Content="dfsdf"/>
Похожие вопросы
Новые вопросы
wpf
Windows Presentation Foundation, или WPF, является подсистемой для визуализации пользовательских интерфейсов в приложениях на основе Windows.