C#面试题更新 2026-08-05

请说明在WPF应用程序中实现拖放(Drag and Drop)功能的具体步骤和所涉及的API?

编码实现技术原理C#WPF

考察说明

考查对WPF拖放机制的理解和实现细节,包括事件处理、数据对象以及UI元素交互。

回答思路

  1. 【回答框架 1】WPF拖放功能基于DataObject,核心是触发源设置待传递数据,调用DragDrop.DoDragDrop启动拖放操作,目标元素设置AllowDrop为true并处理DragEnter、DragOver、Drop等事件。
  2. 【回答框架 2】例如,从ListBox拖拽项到TextBox,可在MouseMove中检测鼠标左键按下且移动距离超过阈值,调用DoDragDrop(参数为源元素、数据对象和允许效果)。目标TextBox的DragOver中检查DataObject.GetDataPresent(如字符串类型),并设置e.Effects决定显示光标。
  3. 【回答框架 3】在Drop事件中,通过e.Data.GetData获取数据,更新目标内容。可选地,通过DragLeave和GiveFeedback事件自定义拖拽反馈效果,如改变鼠标样式或显示拖拽预览。
  4. 【回答框架 4】如果需要拖拽到外部程序,需使用DataFormats中的标准格式(如FileDrop、Text),且可能涉及权限和系统集成。
  5. 【关键点 1】拖放核心是DataObject和DragDrop.DoDragDrop方法。
  6. 【关键点 2】目标元素必须设置AllowDrop=true并实现DragEnter或DragOver以定义e.Effects。
  7. 【关键点 3】在Drop事件中取数据,并考虑数据格式检测。
  8. 【易错点 1】忘记在目标元素设置AllowDrop=true,导致拖放无法生效。
  9. 【易错点 2】在MouseMove中启动拖放时未判断鼠标按钮状态和移动阈值,可能导致误触发拖放。
  10. 【易错点 3】跨进程拖放时需使用正确的DataFormats,否则数据无法传递。