gpt4 book ai didi

c# - 如何在执行拖放操作时通过控件传递 hotTest

转载 作者:行者123 更新时间:2023-11-30 15:41:45 25 4
gpt4 key购买 nike

我有一个选项卡控件,它允许我将选项卡项目拖出我的应用程序。
此拖动将打开一个新窗口,该窗口将跟随鼠标直到我释放鼠标左键。
也可以将选项卡项拖回源选项卡控件并将其重新附加到其以前的父控件或能够理解拖动数据的任何其他控件。

private static void DragOutTabControl_PreviewQueryContinueDrag(object sender, QueryContinueDragEventArgs e)
{
e.Handled = true;

if (DragControlIsHit)
{
if (_previewWindow != null && _previewWindow.IsVisible)
{
_previewWindow.Clear();
_previewWindow.Hide();
}
}
else
{
if (_previewWindow == null)
{
_previewWindow = new PreviewWindow();
_previewWindow.SetData();
}

_previewWindow.Left = CursorPos.X - 15;
_previewWindow.Top = CursorPos.Y - 15;
_previewWindow.Show();
}
}

我现在遇到的问题是,当预览窗口跟随鼠标移动时,它位于光标的正下方。
这样,源选项卡控件的 dragEnter 和 dragOver 事件就不会触发,因为窗口正在阻止 HitTest 。
即使我在窗口中将 IsHitTestVisible 设置为 false, HitTest 也会在拖放仍处于事件状态时被阻止。
将 IsEnabled 设置为 false 并将背景更改为 null 没有任何效果。

public PreviewWindow()
{
Background = null;
IsEnabled = false;
IsHitTestVisible = false;
}

是否有可能从任何 HitTest 中隐藏预览窗口,或者手动将 HitTest 传递给拖动窗口后面可视的任何控件?

编辑,关于我的问题的更多信息:
我不仅想将选项卡项拖出我的选项卡控件并为它们打开新窗口,而且我还希望能够将其他选项卡项拖到现有的拖出窗口中。
此外,将选项卡项拖回原始选项卡控件应该是可能的。

除了我无法在拖放点击测试中隐藏预览窗口的唯一问题外,所有这些都运行良好。

最佳答案

我有一个关于 DragDrop 事件 HitTest 的类似问题,以及 the answer我收到的是切换到使用 MouseEvents 而不是 DragDrop 事件。我做出了转换并且从不后悔,我也从未尝试回到 WPF 的内置 DragDrop 事件。

作为替代方案,如果您不想使用鼠标事件,则可以在装饰层而不是 UI 层上显示您的窗口,并且仅在 Drop 事件发生后才将其呈现为新对象。

关于c# - 如何在执行拖放操作时通过控件传递 hotTest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8066974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com