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

如何确定DragSource中的Drop事件

  •  1
  • Steck  · 技术社区  · 14 年前

    我有一个列表框,其中包含一些文本值

    <ListBox x:Name="DragSource" PreviewMouseMove="DragSource_OnPreviewMouseMove" SelectedValuePath="Content">
      <ListBoxItem>first</ListBoxItem>
      <ListBoxItem>second</ListBoxItem>
     </ListBox>
    

    和事件处理程序

    private void DragSource_OnPreviewMouseMove(object sender, MouseEventArgs e)
    {
     if (e.LeftButton == MouseButtonState.Pressed && DragSource.SelectedItem != null)
     {
      var data = new DataObject(DataFormats.Serializable, DragSource.SelectedItem);
      var value = (string)DragSource.SelectedValue;
      data.SetData(DataFormats.Text, value);
      var de = DragDrop.DoDragDrop(DragSource, data, DragDropEffects.All);
     }
    }
    

    可以将项目拖放到我的其他列表框或其他应用程序(如Word或Excel)中。如果DragDrop效果是“Move”,我如何检测文本是否被删除(例如在Word中)并删除ListBoxItem?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Hans Passant    14 年前

    没有第三方应用程序会告诉你它移动了你的ListBoxItem。它最多只能使用文本表示并告诉您它已复制。获取移动需要一个drop目标,该目标可以在其DragEnter事件处理程序中识别您的对象,并决定它可以对此负责。只有您可以编写这样的事件处理程序。