【发布时间】:2010-03-12 13:13:00
【问题描述】:
我的 WPF Datagrid 上的每个单元格都需要 OnDragEnter 事件。
我试过这个:
<ControlTemplate TargetType="{x:Type my:DataGridCell}" x:Key="RowTemplate">
<ContentPresenter DragEnter="ContentPresenter_DragEnter" >
</ContentPresenter>
</ControlTemplate>
但似乎不起作用。任何想法的人?
编辑:感谢您的回复,我意识到我遇到了另一个问题:
我真正的问题是TextBox 控件总是将拖放事件标记为已处理,因此即使您设置了AllowDrop="True",它看起来也像是 AllowDrop 不起作用。这不是错误,这种行为实际上是设计使然。
我使用预览事件来预测这一点,并且能够处理 D'n'D 事件。
<TextBox
AllowDrop="True"
PreviewDragEnter="TextBox_PreviewDragOver"
PreviewDragOver="TextBox_PreviewDragOver"
PreviewDrop="TextBox_PreviewDrop">
<TextBox/>
希望这会有所帮助。
我将您的回答标记为答案,因为它们对最初的问题是准确的。
【问题讨论】:
-
我没有尝试过,所以我不会将它作为答案发布,但根据文档,DragEnter 事件是一个冒泡路由事件,所以你应该能够在DataGrid 级别和单元格上的 DragEnter 事件将“冒泡”。不利的一面是,如果单元格等较低级别的元素将事件标记为已处理,则此方法将不起作用,尽管您可以通过在代码中调用
AddHandler并将handledEventsToo设置为 true 即AddHandler(DragDrop.DragEnterEvent, myDragHandler, true)来解决此问题。 /跨度>
标签: wpf xaml wpf-controls wpfdatagrid