找出项目是否被丢弃,它应该被丢弃

时间:2016-08-12 16:37:20

标签: wpf

我遇到了一个问题,无法找到简单的解决方案。我有两个列表框,它们之间有拖放。它工作正常,但我正在使用自定义光标(我正在拖动项目的可视化副本),在一个版本我只是删除该自定义光标。我遇到的问题是,如果我将它放在放置区域之外的某个地方,那么我无法再次创建该自定义光标,直到GC收集旧的。

这是我的代码

private void OnGiveFeedback(object sender, GiveFeedbackEventArgs e)
    {
        if (cursor == null)
        {
            var dragSource = sender as ASLDDListBox;
            var container = dragSource.ItemContainerGenerator.ContainerFromItem(communication) as ListBoxItem;
            if (container != null)
            {
                cursor = CursorHelper.CreateCursor(container, EnumInternetListBox.All);
                e.UseDefaultCursors = false;
                Mouse.SetCursor(cursor);
            }
        }
        e.Handled = true;
    }

private void ListBoxOnDrop(object sender, DragEventArgs e)
{
            cursor = null;
}

所以GiveFeedback在dragg期间一直运行,因此我确保我创建了一次光标,否则在大约100次后我得到一个异常。问题是如果我不将它放在该列表框上,我不会使该游标为空。我可以检查usercontrol上的丢弃,但是这个用户控件是在其他用户控件中。无论丢弃的位置是什么,是否有任何事件被触发?

希望这对某人有意义;)

亲切的问候

1 个答案:

答案 0 :(得分:1)

我要尝试的第一件事是:

我会在一个字段中保留我自己的私有引用,并且在它放在正确的位置的情况下将该引用置空 - 然后在创建新的引用时,只需检查该私有引用。如果它不是null,请将其删除。

不是最伟大的事情,但它应该有效,因为你知道如果用户拖动新东西,他必须放弃旧东西。