Мне нужно OnDragEnter
событие для каждой ячейки моего WPF Datagrid. Я попытался это:Как установить событие для всех ячеек в WPF Datagrid
<ControlTemplate TargetType="{x:Type my:DataGridCell}" x:Key="RowTemplate">
<ContentPresenter DragEnter="ContentPresenter_DragEnter" >
</ContentPresenter>
</ControlTemplate>
Но не похоже на работу. Любые идеи людей?
Edit: Спасибо за ответы, я понял, что я столкнулся с другой проблемой, хотя: Моя реальная проблема заключалась в том, что 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) '. – itowlson