使用 Red-Gate 工具,我们检测到 System.Windows.DataObject 持有一个对拖动对象(一个框架元素)的引用,该对象在操作完成后很长时间就一直存在。

一旦 DragDrop.DoDragDrop,如何“清除”拖动对象?有没有办法通过这个传递一个空值并让它直接通过?

最佳答案

我自己刚刚发现了这个 gem,我的解决方案是对被拖动的数据项使用 Wea​​kReference。

DataObject data = new DataObject(new WeakReference(this.draggedData));
DragDrop.DoDragDrop((DependencyObject)sender, data, DragDropEffects.Move);

然后在下降

var draggedItem = e.Data.GetData(this.format.Name) as WeakReference;
if (draggedItem != null && draggedItem.IsAlive)
{
    ....
}

关于拖放导致的 WPF 内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10645946/

10-13 00:52