我遇到了一个问题,无法找到简单的解决方案。我有两个列表框,它们之间有拖放。它工作正常,但我正在使用自定义光标(我正在拖动项目的可视化副本),在一个版本我只是删除该自定义光标。我遇到的问题是,如果我将它放在放置区域之外的某个地方,那么我无法再次创建该自定义光标,直到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上的丢弃,但是这个用户控件是在其他用户控件中。无论丢弃的位置是什么,是否有任何事件被触发?
希望这对某人有意义;)
亲切的问候
答案 0 :(得分:1)
我要尝试的第一件事是:
我会在一个字段中保留我自己的私有引用,并且在它放在正确的位置的情况下将该引用置空 - 然后在创建新的引用时,只需检查该私有引用。如果它不是null,请将其删除。
不是最伟大的事情,但它应该有效,因为你知道如果用户拖动新东西,他必须放弃旧东西。