public void OnMouseDown(Grid target, IUnityContainer container, MouseEventArgs e) { if (target != container.Resolve <Grid>(Key)) { return; } var viewport = container.Resolve <Rectangle>(Key); var rowSpan = Grid.GetRowSpan(viewport); var currentRow = Grid.GetRow(viewport); var row = target.GetRow(e.GetPosition(target)); if (!row.HasValue) { return; } while (row + rowSpan / 2 > target.RowDefinitions.Count) { row--; } Grid.SetRow(viewport, Math.Max(row.Value - rowSpan / 2, 0)); var colSpan = Grid.GetColumnSpan(viewport); var currentCol = Grid.GetColumn(viewport); var col = target.GetColumn(e.GetPosition(target)); if (!col.HasValue) { return; } while (col + colSpan / 2 > target.ColumnDefinitions.Count) { col--; } Grid.SetColumn(viewport, Math.Max(col.Value - colSpan / 2, 0)); if (currentRow != row || currentCol != col) { ViewportEventDispatcher.DispatchMoveEvent(viewport, container); } }
public void OnMouseWheel(Grid target, IUnityContainer container, MouseWheelEventArgs e) { if (target != container.Resolve <Grid>(Key)) { return; } var viewport = container.Resolve <Rectangle>(Key); var rowSpan = Grid.GetRowSpan(viewport); var currentRow = Grid.GetRow(viewport); var row = currentRow - (Math.Sign(e.Delta) * rowSpan / 2); var last = Math.Max((target.RowDefinitions.Count) - Grid.GetRowSpan(viewport), 0); row = Math.Max(row, 0); row = Math.Min(row, last); Grid.SetRow(viewport, row); if (currentRow != row) { ViewportEventDispatcher.DispatchMoveEvent(viewport, container); } }