我有一个窗口样式设置为“无”的窗口,可以处理OnPreviewMouseDown,OnPreviewMouseUp和OnmouseMove,以便可以从任何位置拖动该窗口。
后面的Windows代码如下:
bool inDrag;
protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnPreviewMouseLeftButtonDown(e);
inDrag = true;
}
protected override void OnmouseMove(MouseEventArgs e)
{
base.OnmouseMove(e);
if (inDrag && e.LeftButton == MouseButtonState.pressed)
{
this.DragMove();
}
}
protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnPreviewMouseLeftButtonUp(e);
if (inDrag)
{
inDrag = false;
}
}
现在的问题是,我在此窗口中有一个大菜单,其中包含一个滚动条,该滚动条可与滚动轮一起使用,并且通过单击滚动查看器上的某个位置来工作,但单击并拖动滚动条本身时却不能。同样,如果我单击并按住并将光标移到窗口上方,则滚动将再次起作用。这使我相信上述拖动实现阻止了scrollviewers的拖动功能。
我尝试在OnmouseMove中使用.RaiseEvent(e)手动引发事件,但是当我将鼠标移到窗口上方时,这会导致堆栈溢出异常。
如何在不删除单击和拖动窗口行为的情况下使Scrollviewer响应鼠标的移动?