Как установить событие для всех ячеек в WPF Datagrid - PullRequest
0 голосов
/ 12 марта 2010

Мне нужно событие OnDragEnter для каждой ячейки в моем WPF Datagrid. Я попробовал это:

<ControlTemplate TargetType="{x:Type my:DataGridCell}" x:Key="RowTemplate">
    <ContentPresenter DragEnter="ContentPresenter_DragEnter" >
    </ContentPresenter>
</ControlTemplate>

Но, похоже, не работает. Есть идеи, люди?


Редактировать: Спасибо за ответы, я понял, что столкнулся с другой проблемой, хотя: Моя настоящая проблема заключалась в том, что элемент управления TextBox всегда помечает события перетаскивания как обработанные , поэтому даже если вы установите AllowDrop="True", будет выглядеть, что AllowDrop не работает. Это не ошибка, это поведение на самом деле задумано.

Я использовал Preview Preview, чтобы предвидеть это и иметь возможность обрабатывать события D'n'D.

<TextBox
    AllowDrop="True"
    PreviewDragEnter="TextBox_PreviewDragOver" 
    PreviewDragOver="TextBox_PreviewDragOver"  
    PreviewDrop="TextBox_PreviewDrop">
<TextBox/>

Надеюсь, это поможет.
Я отмечаю ваши ответы как ответы, поскольку они были точны в отношении исходного вопроса.

Ответы [ 2 ]

2 голосов
/ 13 марта 2010

Вы рядом.

Вам необходимо установить AllowDrop, и вам нужно установить на уровне или ниже уровень, который вы устанавливаете обработчиком событий. Например:

<ControlTemplate TargetType="{x:Type my:DataGridCell}" x:Key="RowTemplate"> 
  <ContentPresenter DragEnter="ContentPresenter_DragEnter" AllowDrop="true"> 
  </ContentPresenter> 
</ControlTemplate>

События перетаскивания отправляются только на UIElements с AllowDrop="true". Оттуда они поднимаются вверх по дереву, пока с ними не справятся.

Обратите внимание, что вы можете добавить обработчик DragEnter в самом DataGrid вместо каждой ячейки, но если вы хотите получить информацию о том, какая ячейка является целью удаления, вам все равно следует установить AllowDrop="true" на уровне ячейки.

1 голос
/ 13 марта 2010

Я уверен, что вам нужно установить для свойства AllowDrop значение true в ячейке. Если для этого параметра не установлено значение true, элемент не будет участвовать в событиях перетаскивания.

...