代码之家  ›  专栏  ›  技术社区  ›  Natxo

如何为WPF数据报中的所有单元格设置事件

  •  0
  • Natxo  · 技术社区  · 15 年前

    我需要 OnDragEnter 我的WPF数据报上每个单元格的事件。 我试过这个:

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

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

    2 回复  |  直到 15 年前
        1
  •  2
  •   Ray Burns    15 年前

    你很亲近。

    你需要设置 AllowDrop ,你需要设置它 在或低于 设置事件处理程序的级别。例如:

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

    拖放事件仅发送到 UIElements 那有 AllowDrop="true" . 从那里,它们在树上冒泡,直到被处理。

    请注意,您可以添加 DragEnter 上的处理程序 DataGrid 它本身而不是在每个单元格上,但如果您希望获得有关哪个单元格是放置目标的信息,则仍应设置 allowDrop=“真” 在单元级别。

        2
  •  1
  •   Abe Heidebrecht    15 年前

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