从未调用过 WPF ListBoxItem 事件

WPF ListBoxItem events never called

我想在 ListBoxItem 上触发事件

        <ListBox.ItemTemplate>

            <DataTemplate>

            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">

               <EventSetter Event="Drop"     
                        Handler="Item_Drop"/>

                <EventSetter Event="PreviewMouseLeftButtonDown" 
                       Handler="Item_PreviewMouseLeftButtonDown"  />
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>

在代码隐藏中,有两个事件处理程序

    private void Item_Drop(object sender, DragEventArgs e)
    {

    }

    private void Item_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {

    }

永远不会调用事件处理程序,我做错了什么?

顺便说一句,DataTemplate 包含一个 Grid 控件。我已经尝试使用 Grid 控件上的事件。同样的结果,事件处理程序从未被调用或从未到达。

仅供参考,我没有检查这个的环境。我将描述问题及其解决方案。但是我的代码可能有错误。

主要是我不记得默认情况下边框或网格是否伸展。 测试这个的主要事情是应用颜色并尝试宽度 + 高度只是为了检查你的事件。

事件设置器很好。 这里的问题是没有检测到事件。 这样做的原因是您的项目的宽度为 0,高度为 0,因此它不会占用任何 space 被点击或掉落在

另一个原因是颜色。 如果拉伸的项目没有颜色,则不会绘制任何像素,因此事件不会发生。 即使应用 Background = "Transparent" 也可以解决问题。

         <ListBox.ItemTemplate>

            <DataTemplate>
                  <Border Background="Red" />  <!-- Or Grid or any thing that stretches out -->  
            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">

               <EventSetter Event="Drop"     
                        Handler="Item_Drop"/>

                <EventSetter Event="PreviewMouseLeftButtonDown" 
                       Handler="Item_PreviewMouseLeftButtonDown"  />
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>