gpt4 book ai didi

c# - WPF:单击鼠标右键/中键时 DoDragDrop 被打断

转载 作者:太空宇宙 更新时间:2023-11-03 11:14:59 27 4
gpt4 key购买 nike

我已经扩展了 Canvas {System.Windows.Controls} 和可拖动到 Canvas 中的项目。在拖动过程中,我有 OnDragOver 事件,当用户单击并按住鼠标中键时,我会在其中进行平移。

Item 网站上:DoDragDrop - 常用的拖动功能
Canvas 站点上:OnDragOver - 平移 Canvas

因此用户可以同时拖动和平移。

在我换上新笔记本电脑 (Lenovo) 和 Visual Studio 2012(2010 之前)之前,一切正常。现在,当我按下鼠标中键(或右键)时,Canvas 的 OnMouseMove 事件会立即被触发。之后拖动立即停止,也没有平移。

我的同事尝试从 Visual Studio 2010 运行相同的代码并且运行正常。他设置了他的版本,所以我试了一下,结果是一样的——在我的笔记本电脑上,我无法在拖动过程中平移..

有人知道问题出在哪里吗?硬件、软件、联想、Windows?

项目信息:WPF、DevExpress 12.1、.NET 4、Windows 7 专业版、VS 2012

请记住,我在 WPF 中还是新手 :)

最佳答案

只是回答我自己的问题,也许对某些人有用。

我没有找出问题出在哪里,但我的结论是,在某些 PC 上,当用户在拖动时按下鼠标中键/右键时,DragDrop 可能会被中断。

要覆盖此行为,您需要添加 QueryContinueDragHandler到拖放。然后在您自己的处理程序中使用您的逻辑来响应鼠标/键盘输入。

所以我的代码是这样的:

DragDrop.AddQueryContinueDragHandler(this, QueryContinueDragHandler);
DragDrop.DoDragDrop(this, dataObject, DragDropEffects.Copy);
DragDrop.RemoveQueryContinueDragHandler(this, QueryContinueDragHandler);

和自定义处理程序:

/// <summary>
/// Own handler. This event is raised when something happens during DragDrop operation (user presses Mouse button or Keyboard button...)
/// Necessary to avoid canceling DragDrop on MouseMiddleButon on certain PCs.
/// Overrides default handler, that interrupts DragDrop on MouseMiddleButon or MouseRightButton down.
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
private void QueryContinueDragHandler(Object source, QueryContinueDragEventArgs e)
{
e.Handled = true;

// if ESC
if (e.EscapePressed)
{
// --> cancel DragDrop
e.Action = DragAction.Cancel;

return;
}

// if LB
if (e.KeyStates.HasFlag(DragDropKeyStates.LeftMouseButton))
{
// --> continue dragging
e.Action = DragAction.Continue;
}
// if !LB (user released LeftMouseButton)
else
{
// and if mouse is inside canvas
if (_isMouseOverCanvas)
{
// --> execute Drop
e.Action = DragAction.Drop;
}
else
{
// --> cancel Drop
e.Action = DragAction.Cancel;
}

return;
}

// if MB
if (e.KeyStates.HasFlag(DragDropKeyStates.MiddleMouseButton))
{
// --> continue dragging
e.Action = DragAction.Continue;
}
}

关于c# - WPF:单击鼠标右键/中键时 DoDragDrop 被打断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12915754/

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