WPF ListBoxItem事件从未调用

时间:2018-07-11 08:58:07

标签: wpf events listboxitem

我想触发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控件上的事件。结果相同,事件处理程序永远不会被调用或永远不会到达。

1 个答案:

答案 0 :(得分:0)

仅供参考,我没有环境可以对此进行检查。我将描述问题及其解决方案。但是我可能在代码中有一个错误。

主要我不记得默认情况下边框或网格是否伸展。 测试这一点的主要方法是应用一种颜色,然后尝试尝试使用Width + Height来检查事件。

事件设置器很好。 这里的问题是未检测到事件。 这样做的原因是您的商品的宽度为0,高度为0,因此它不会占用任何要单击或放置的空间

另一个原因是颜色。 如果拉伸的项目没有颜色,则不会绘制任何像素,因此即使发生事件也不会发生。 即使应用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>