我想触发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)
仅供参考,我没有环境可以对此进行检查。我将描述问题及其解决方案。但是我可能在代码中有一个错误。
主要我不记得默认情况下边框或网格是否伸展。 测试这一点的主要方法是应用一种颜色,然后尝试尝试使用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>