0

我的 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/>

希望这可以帮助。
我将您的回答标记为答案,因为它们对最初的问题是准确的。

4

2 回答 2

2

你很亲密。

您需要设置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"在单元格级别设置。

于 2010-03-13T18:13:47.430 回答
1

我很确定您需要在单元格上将 AllowDrop 属性设置为 true。如果不将此设置为 true,则元素将不会参与拖放事件。

于 2010-03-12T22:57:47.327 回答