private void _DrawingBoard_PanelDragging(object sender, BoardDraggingEventArgs e) { if (_DrawingBoard.Width <= Width && _DrawingBoard.Height <= Height) { return; } //根据拖动的起点和当前点之间的距离,触发滚动条的Value发生变化,再间接触发画板的移动 Point current = PointToClient(_DrawingBoard.PointToScreen(e.CurrentPoint)); Point start = PointToClient(_DrawingBoard.PointToScreen(e.StartPoint)); int x = (current.X - start.X) / 3; int y = (current.Y - start.Y) / 3; int offsetX = _HScrollBar.Value - x; if (offsetX > _HScrollBar.Minimum && offsetX < _HScrollBar.Maximum) { _HScrollBar.Value = offsetX; } int offsetY = _VScrollBar.Value - y; if (offsetY > _VScrollBar.Minimum && offsetY < _VScrollBar.Maximum) { _VScrollBar.Value = _VScrollBar.Value - y; } //TODO:左与上的边距有了,为什么下与右的边距没有呢? }
private void OnBoardDragging(BoardDraggingEventArgs e) { EventHandler <BoardDraggingEventArgs> handler = BoardDragging; if (handler != null) { handler(this, e); } }