WPF 拖动离开事件坐标不准确



我想在 DragEnter 事件发生时显示一个拖动控件 (DataView),并在 DragLeave 事件触发时隐藏它。由于我在控件中也有子项,因此在进入子控件时也会触发 leave 事件。所以我决定只在控件收到 DragLeave 事件并且鼠标不在完整的拖动控件内时才隐藏控件:

private void AView_DragLeave(object sender, DragEventArgs e)
{
var aPosition = e.GetPosition(DataView);
bool IsInside = (aPosition.X >= 5) && (aPosition.X < DataView.ActualWidth - 5) && (aPosition.Y >= 5) &&
(aPosition.Y < DataView.ActualHeight - 5);
DataView.Opacity = IsInside ? 1 : 0;
}

现在的问题是,当 DragLeave 触发时,鼠标仍在数据中,我从来没有达到我有正确信息来隐藏控件的地步。这个问题有没有其他解决方案。使用 Mouse.GetPosition() 获取当前鼠标位置不起作用,因为在拖放操作时不会真正跟踪鼠标位置。

我认为与其处理DragLeave事件,不如处理AViewPreviewDragLeave事件并设置e.handled = true;。 这样孩子们就不应该触发DragLeave事件。

最新更新