我的WPF Datagrid上的每个单元都需要OnDragEnter
个事件。
我试过这个:
<ControlTemplate TargetType="{x:Type my:DataGridCell}" x:Key="RowTemplate">
<ContentPresenter DragEnter="ContentPresenter_DragEnter" >
</ContentPresenter>
</ControlTemplate>
但似乎没有用。人们有什么想法?
编辑:感谢您的回复,我意识到我遇到了另一个问题:
我真正的问题是TextBox
控件始终将拖放事件标记为已处理,因此即使您设置AllowDrop="True"
,它看起来也会像AllowDrop一样无效。这不是一个bug,这种行为实际上是设计出来的。
我使用了预览事件来预测这一点,并且能够处理D'n'D事件。
<TextBox
AllowDrop="True"
PreviewDragEnter="TextBox_PreviewDragOver"
PreviewDragOver="TextBox_PreviewDragOver"
PreviewDrop="TextBox_PreviewDrop">
<TextBox/>
希望这有帮助。
我将您的回答标记为答案,因为它们对于最初的问题是准确的。
答案 0 :(得分:2)
你很亲密。
您需要设置AllowDrop
,并且需要将其设置为等级设置事件处理程序的级别。例如:
<ControlTemplate TargetType="{x:Type my:DataGridCell}" x:Key="RowTemplate">
<ContentPresenter DragEnter="ContentPresenter_DragEnter" AllowDrop="true">
</ContentPresenter>
</ControlTemplate>
拖放事件仅发送给UIElements
的{{1}}。从那里,他们在树上冒泡,直到处理完毕。
请注意,您可以在AllowDrop="true"
本身而不是每个单元格上添加DragEnter
处理程序,但如果您想了解哪个单元格是放置目标的信息,您仍应设置DataGrid
在细胞层面。
答案 1 :(得分:1)
我很确定你需要在单元格上将AllowDrop属性设置为true。如果没有将此设置为true,则元素将不参与拖放事件。