我正在使用正在使用拖放功能的WPF应用程序。
拖放操作是一个阻塞操作,在我的应用程序中有一些负面的副作用。我最近添加了使用装饰器来显示项目拖动。这个问题是,为了做到这一点,我需要跟踪鼠标的当前位置。当启动拖放操作时,它会阻止进一步执行,直到该项被删除。
我已经读过,修复此问题的方法是在自己的线程中执行拖放操作,然后更新UI。我在这里阅读这篇文章
http://msdn.microsoft.com/en-us/library/ms741870.aspx
我不确定这是否是我想要的,但这听起来像我需要的。
还有其他解决方法吗?
这是我需要执行的代码。
private void FieldItemGrid_PreviewMouseMove(object sender, MouseEventArgs e)
{
if (_isDown)
{
if ((_isDragging == false))
{
/*Add Adorner to Item that is being dragged*/
DragStarted(e.GetPosition(this));
}
if (_selectedElement != null)
{
/*Begin Drag Operation*/
DragDrop.DoDragDrop(_selectedElement, _selectedElement, DragDropEffects.Move);
}
/*The following code is not executed until the dragged item is released*/
if (_isDragging)
{
/*Update Current Position of Mouse to update adorner position*/
DragMoved(e.GetPosition(this));
}
}
}
答案 0 :(得分:2)
您可以使用DragDrop.GiveFeedback
附加事件:
private void FieldItemGrid_PreviewMouseMove(object sender, MouseEventArgs e) {
if (_isDown) {
if ((_isDragging == false)) {
/*Add Adorner to Item that is being dragged*/
DragStarted(e.GetPosition(this));
}
if (_selectedElement != null) {
DragDrop.AddGiveFeedbackHandler(Element, OnGiveFeedback);
try {
/*Begin Drag Operation*/
DragDrop.DoDragDrop(_selectedElement, _selectedElement, DragDropEffects.Move);
}
finally {
DragDrop.RemoveGiveFeedbackHandler(Element, OnGiveFeedback);
}
}
/*The following code is not executed until the dragged item is released*/
if (_isDragging) {
/*Update Current Position of Mouse to update adorner position*/
DragMoved(e.GetPosition(this));
}
}
}
private void OnGiveFeedback(object sender, GiveFeedbackEventArgs e) {
// Update adorner location here
}