我有一個選項卡控件,可以將選項卡項目拖出我的應用程序。
這個拖動將打開一個新的窗口,它將跟隨鼠標,直到我釋放鼠標左鍵。
此外,可以將選項卡項拖回到源選項卡控件中,並將其重新附加到其前父項或任何其他能夠理解拖動數據的控件。如何在執行拖放操作時將hitTest通過控件傳遞
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事件不會觸發,因爲窗口阻止了命中測試。
即使我在窗口中將IsHitTestVisible設置爲false,在拖動&拖放仍處於活動狀態時,命中測試將被阻止。
將IsEnabled設置爲false並將背景更改爲null不起任何作用。
public PreviewWindow()
{
Background = null;
IsEnabled = false;
IsHitTestVisible = false;
}
是否有任何可能將隱藏預覽窗口從任何命中測試或手動將命中測試傳遞到拖動窗口後面的任何控件?
編輯,我的問題的一些更多信息:
我不僅想要將標籤項拖出我的標籤控件,併爲他們打開新的窗口,而且我希望能夠拖動額外的標籤項目到現有的拖出窗口。
另外,應該可以將選項卡項目拖回到原始選項卡控件中。
除了唯一的問題,我無法隱藏拖動& drop-hittesting的預覽窗口,這一切都工作得很好。
首先,感謝您的回答。 它支持我自己對該主題的想法,但由於我必須能夠處理從其他來源的拖放,我不想使用普通的MouseEvent而不是DragDropEvents。 – lukas
另外我給了裝飾者一個嘗試,但我不喜歡在釋放鼠標按鈕時創建窗口。 – lukas