/// <summary> /// Left mouse button up /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DesignerScrollViewer_OnPreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (ViewModel.MouseMode == MouseMode.Panning || _dragStartPoint.HasValue) { DesignerScrollViewer.ReleaseMouseCapture(); _dragStartPoint = null; e.Handled = true; } }
/// <summary> /// Left mouse button down /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DesignerScrollViewer_OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (ViewModel.MouseMode == MouseMode.Panning) { _dragStartPoint = e.GetPosition(DesignerScrollViewer); _capturedHorizontalOffset = DesignerScrollViewer.HorizontalOffset; _capturedVerticalOffset = DesignerScrollViewer.VerticalOffset; DesignerScrollViewer.CaptureMouse(); Keyboard.Focus(DesignerScrollViewer); e.Handled = true; } }
/// <summary> /// Mouse move /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DesignerScrollViewer_OnPreviewMouseMove(object sender, MouseEventArgs e) { if (ViewModel.MouseMode == MouseMode.Panning) { if (_dragStartPoint.HasValue) { Vector delta = e.GetPosition(DesignerScrollViewer) - _dragStartPoint.Value; DesignerScrollViewer.ScrollToHorizontalOffset(_capturedHorizontalOffset - delta.X); DesignerScrollViewer.ScrollToVerticalOffset(_capturedVerticalOffset - delta.Y); e.Handled = true; } } }
/// <summary> /// Mouse wheel used /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DesignerScrollViewer_OnPreviewMouseWheel(object sender, MouseWheelEventArgs e) { if (Keyboard.Modifiers != 0) { TableViewControl viewControl = e.Source as TableViewControl; if (viewControl != null) { try { var grid = viewControl.TableDataGrid; var item = grid.SelectedItem; var row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow; var cbox = VisualTreeHelperEx.FindDescendantByName(row, "DataTypeComboBox") as ComboBox; if (cbox != null) { cbox.IsDropDownOpen = false; } } catch (Exception exc) { Trace.WriteLine(exc.Message); } } } if ((Keyboard.Modifiers & ModifierKeys.Control) != 0) { double newScale = ViewModel.Scale; if (e.Delta > 0) { newScale += 0.05; } else if (e.Delta < 0) { newScale -= 0.05; } ViewModel.ChangeZoomCommand.Execute(newScale.ToString("G")); e.Handled = true; } else if ((Keyboard.Modifiers & ModifierKeys.Shift) != 0) { DesignerScrollViewer.ScrollToHorizontalOffset(DesignerScrollViewer.HorizontalOffset + e.Delta); e.Handled = true; } }
private void EditCanvas_MouseWheel(object sender, MouseWheelEventArgs e) { DesignerBaseCanvas it1 = sender as DesignerBaseCanvas; if (it1 == null) { return; } if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) { IPagePropertyData page = this.DataContext as IPagePropertyData; Rect selectWdgBounding = page.BoundingRect; if (e.Delta > 0) { //ExternCanvas. ScaleTransform scaletransform = ExternCanvasBorder.RenderTransform as ScaleTransform; scaletransform.ScaleX = PageScaleEnumerator.GetValue(scaletransform.ScaleX, true);// Math.Min(1.7, scaletransform.ScaleX + 0.01); double hOffset = (selectWdgBounding.Left + selectWdgBounding.Width / 2) * scaletransform.ScaleX - DesignerScrollViewer.ActualWidth / 2; double vOffset = (selectWdgBounding.Top + selectWdgBounding.Height / 2) * scaletransform.ScaleX - DesignerScrollViewer.ActualHeight / 2; DesignerScrollViewer.ScrollToHorizontalOffset(hOffset); DesignerScrollViewer.ScrollToVerticalOffset(vOffset); NLogger.Debug("e.Delta: " + e.Delta + " Scale: " + scaletransform.ScaleX + " view width: " + viewWidth + " view height: " + viewHeight + " horizontalOffset: " + hOffset + " verticalOffset:" + vOffset + " DesignerScrollViewer.ActualWidth:" + DesignerScrollViewer.ActualWidth); } else if (e.Delta < 0) { ScaleTransform scaletransform = ExternCanvasBorder.RenderTransform as ScaleTransform; scaletransform.ScaleX = PageScaleEnumerator.GetValue(scaletransform.ScaleX, false); //Math.Max(0.3, scaletransform.ScaleX - 0.01); //scaletransform.ScaleY = PageScaleEnumerator.GetValue(scaletransform.ScaleY, false); //Math.Max(0.3, scaletransform.ScaleY - 0.01); double hOffset = (selectWdgBounding.Left + selectWdgBounding.Width / 2) * scaletransform.ScaleX - DesignerScrollViewer.ActualWidth / 2; double vOffset = (selectWdgBounding.Top + selectWdgBounding.Height / 2) * scaletransform.ScaleX - DesignerScrollViewer.ActualHeight / 2; DesignerScrollViewer.ScrollToHorizontalOffset(hOffset); DesignerScrollViewer.ScrollToVerticalOffset(vOffset); NLogger.Debug("e.Delta: " + e.Delta + " Scale: " + scaletransform.ScaleX + " view width: " + viewWidth + " view height: " + viewHeight + " horizontalOffset: " + hOffset + " verticalOffset:" + vOffset + " DesignerScrollViewer.ActualWidth:" + DesignerScrollViewer.ActualWidth); } e.Handled = true; } }
private void DesignerScrollViewer_PreviewMouseMove(object sender, MouseEventArgs e) { base.OnMouseMove(e); //double a = e.GetPosition(DesignerScrollViewer).X; //double b = e.GetPosition(DesignerScrollViewer).Y; //if (e.LeftButton == MouseButtonState.Pressed) //{ // Debug.WriteLine("scrollview-->>------" + a + "----" + b); //} if (e.LeftButton == MouseButtonState.Pressed) { Type ty = e.OriginalSource.GetType(); //if(e.Source is CPSScrollViewer && (e.OriginalSource is Adorner)==false) //{ return; } if (e.OriginalSource.GetType().Equals(typeof(Thumb)) || e.OriginalSource.GetType().Equals(typeof(RepeatButton))) { return; } Point position = e.GetPosition(DesignerScrollViewer); double xScroll = DesignerScrollViewer.ActualWidth - position.X; double yScroll = DesignerScrollViewer.ActualHeight - position.Y; if (xScroll < 30) { DesignerScrollViewer.ScrollToHorizontalOffset(DesignerScrollViewer.HorizontalOffset + Math.Min(10, Math.Abs(30 - xScroll))); } else if (position.X < 10) { DesignerScrollViewer.ScrollToHorizontalOffset(DesignerScrollViewer.HorizontalOffset - Math.Min(10, Math.Abs(10 - position.X))); } if (yScroll < 30) { DesignerScrollViewer.ScrollToVerticalOffset(DesignerScrollViewer.VerticalOffset + Math.Min(10, Math.Abs(30 - yScroll))); } else if (position.Y < 10) { DesignerScrollViewer.ScrollToVerticalOffset(DesignerScrollViewer.VerticalOffset - Math.Min(10, Math.Abs(10 - position.Y))); } } }
private void EditCanvas_MouseWheel(object sender, MouseWheelEventArgs e) { DesignerBaseCanvas it = sender as DesignerBaseCanvas; if (it == null) { return; } if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) { IPagePropertyData page = this.DataContext as IPagePropertyData; Rect selectWdgBounding = page.BoundingRect; if (e.Delta > 0) { //ExternCanvas. ScaleTransform scaletransform = ExternCanvasBorder.RenderTransform as ScaleTransform; //scaletransform.ScaleX = Math.Min(1.7, scaletransform.ScaleX + 0.01); //scaletransform.ScaleY = Math.Min(1.7, scaletransform.ScaleY + 0.01); scaletransform.ScaleX = PageScaleEnumerator.GetValue(scaletransform.ScaleX, true); DesignerScrollViewer.ScrollToHorizontalOffset((selectWdgBounding.Left + selectWdgBounding.Width / 2) * scaletransform.ScaleX - DesignerScrollViewer.ActualWidth / 2); DesignerScrollViewer.ScrollToVerticalOffset((selectWdgBounding.Top + selectWdgBounding.Height / 2) * scaletransform.ScaleX - DesignerScrollViewer.ActualHeight / 2); } else if (e.Delta < 0) { ScaleTransform scaletransform = ExternCanvasBorder.RenderTransform as ScaleTransform; //scaletransform.ScaleX = Math.Max(0.3, scaletransform.ScaleX - 0.01); //scaletransform.ScaleY = Math.Max(0.3, scaletransform.ScaleY - 0.01); scaletransform.ScaleX = PageScaleEnumerator.GetValue(scaletransform.ScaleX, false); DesignerScrollViewer.ScrollToHorizontalOffset((selectWdgBounding.Left + selectWdgBounding.Width / 2) * scaletransform.ScaleX - DesignerScrollViewer.ActualWidth / 2); DesignerScrollViewer.ScrollToVerticalOffset((selectWdgBounding.Top + selectWdgBounding.Height / 2) * scaletransform.ScaleX - DesignerScrollViewer.ActualHeight / 2); } e.Handled = true; } }
/// <summary> /// Scale changed /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void ViewModelOnScaleChanged(object sender, ScaleEventArgs args) { double contentHorizontalMiddle = (args.OldHorizontalOffset + args.OldViewportWidth / 2) / args.OldScale; double contentVerticalMiddle = (args.OldVerticalOffset + args.OldViewportHeight / 2) / args.OldScale; if ((int)DesignerScrollViewer.ScrollableWidth == 0) { contentHorizontalMiddle = ViewModel.CanvasWidth / 2; } if ((int)DesignerScrollViewer.ScrollableHeight == 0) { contentVerticalMiddle = ViewModel.CanvasHeight / 2; } double newContentHorizontalOffset = contentHorizontalMiddle - (ViewModel.ViewportWidth / 2) / ViewModel.Scale; double newContentVerticalOffset = contentVerticalMiddle - (ViewModel.ViewportHeight / 2) / ViewModel.Scale; double newHorizontalOffset = newContentHorizontalOffset * ViewModel.Scale; double newVerticalOffset = newContentVerticalOffset * ViewModel.Scale; DesignerScrollViewer.ScrollToHorizontalOffset(newHorizontalOffset); DesignerScrollViewer.ScrollToVerticalOffset(newVerticalOffset); }
private void UpdateScrollAndScale(DesignerCanvas canvas) { if (DataContext is DiagramViewModel && canvas != null) { if (canvas != null) { DiagramViewModel view = DataContext as DiagramViewModel; ScaleTransform transform = null; if (canvas.LayoutTransform is ScaleTransform) { transform = canvas.LayoutTransform as ScaleTransform; } else { transform = new ScaleTransform(); canvas.LayoutTransform = transform; } transform.ScaleX = view.Scale; transform.ScaleY = view.Scale; DesignerScrollViewer.ScrollToHorizontalOffset(view.HorizontalOffset); DesignerScrollViewer.ScrollToVerticalOffset(view.VerticalOffset); } } }
private void DesignerScrollViewer_DragOver(object sender, DragEventArgs e) { Point position = e.GetPosition(DesignerScrollViewer); double xScroll = DesignerScrollViewer.ActualWidth - position.X; double yScroll = DesignerScrollViewer.ActualHeight - position.Y; if (xScroll < 50) { DesignerScrollViewer.ScrollToHorizontalOffset(DesignerScrollViewer.HorizontalOffset + 50 - xScroll); } else if (position.X < 30) { DesignerScrollViewer.ScrollToHorizontalOffset(DesignerScrollViewer.HorizontalOffset - 30 + position.X); } if (yScroll < 50) { DesignerScrollViewer.ScrollToVerticalOffset(DesignerScrollViewer.VerticalOffset + 50 - yScroll); } else if (position.Y < 30) { DesignerScrollViewer.ScrollToVerticalOffset(DesignerScrollViewer.VerticalOffset - 30 + position.Y); } }