mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-04-05 00:37:19 +08:00
右键拖动画布
This commit is contained in:
@@ -188,10 +188,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
public DesignerCanvas()
|
||||
{
|
||||
this.AllowDrop = true;
|
||||
this.Focusable = true;
|
||||
Mediator.Instance.Register(this);
|
||||
|
||||
_service.PropertyChanged += _service_PropertyChanged;
|
||||
this.Loaded += DesignerCanvas_Loaded;
|
||||
}
|
||||
|
||||
private void DesignerCanvas_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
this.Focus();
|
||||
}
|
||||
|
||||
protected override void OnRender(DrawingContext dc)
|
||||
@@ -322,9 +328,12 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
protected override void OnMouseDown(MouseButtonEventArgs e)
|
||||
{
|
||||
base.OnMouseDown(e);
|
||||
base.OnMouseDown(e);
|
||||
|
||||
if (_viewModel.IsReadOnly) return;
|
||||
|
||||
this.Focus();
|
||||
|
||||
if (_service.DrawModeViewModel.CursorMode == CursorMode.Format)
|
||||
{
|
||||
var element = (e.OriginalSource as FrameworkElement);
|
||||
@@ -356,7 +365,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
_viewModel.ClearSelectedItemsCommand.Execute(null);
|
||||
|
||||
}
|
||||
e.Handled = true;
|
||||
//e.Handled = true;
|
||||
|
||||
if (_service.DrawModeViewModel.GetDrawMode() == DrawMode.ConnectingLineSmooth)
|
||||
{
|
||||
@@ -435,7 +444,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
}
|
||||
e.Handled = true;
|
||||
//e.Handled = true;
|
||||
}
|
||||
|
||||
protected override void OnMouseUp(MouseButtonEventArgs e)
|
||||
@@ -499,7 +508,33 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
sourceConnectorInfo = null;
|
||||
|
||||
_service.DrawModeViewModel.ResetDrawMode();
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnPreviewKeyDown(KeyEventArgs e)
|
||||
{
|
||||
base.OnPreviewKeyDown(e);
|
||||
|
||||
if (_viewModel.IsReadOnly) return;
|
||||
|
||||
e.Handled = _viewModel.ExecuteShortcut(e);
|
||||
}
|
||||
|
||||
protected override void OnPreviewMouseWheel(MouseWheelEventArgs e)
|
||||
{
|
||||
base.OnPreviewMouseWheel(e);
|
||||
|
||||
if (Keyboard.IsKeyDown(Key.LeftCtrl) == false
|
||||
&& Keyboard.IsKeyDown(Key.RightCtrl) == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var newZoomValue = _viewModel.ZoomValue + (e.Delta > 0 ? 0.1 : -0.1);
|
||||
|
||||
_viewModel.ZoomValue = Math.Max(Math.Min(newZoomValue, _viewModel.MaximumZoomValue), _viewModel.MinimumZoomValue);
|
||||
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
protected override Size MeasureOverride(Size constraint)
|
||||
{
|
||||
@@ -555,7 +590,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
base.OnDrop(e);
|
||||
|
||||
if (_viewModel.IsReadOnly) return;
|
||||
if (_viewModel.IsReadOnly) return;
|
||||
|
||||
DragObject dragObject = e.Data.GetData(typeof(DragObject)) as DragObject;
|
||||
if (dragObject != null)
|
||||
@@ -620,7 +655,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
_viewModel.AddItemCommand.Execute(itemBase);
|
||||
}
|
||||
}
|
||||
e.Handled = true;
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
public FullyCreatedConnectorInfo FindNearPortToAttachTo()
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Controls.Primitives;
|
||||
using System.Windows.Media;
|
||||
|
||||
@@ -23,6 +21,8 @@ namespace AIStudio.Wpf.DiagramDesigner.Controls
|
||||
private bool drag;
|
||||
private void DragThumb_DragStarted(object sender, DragStartedEventArgs e)
|
||||
{
|
||||
GetDesignerCanvas(this)?.Focus();
|
||||
|
||||
drag = false;
|
||||
SelectableDesignerItemViewModelBase designerItem = this.DataContext as SelectableDesignerItemViewModelBase;
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.Windows.Controls.Primitives;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Input;
|
||||
using AIStudio.Wpf.DiagramDesigner.Helpers;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
@@ -67,17 +68,20 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
if (oldDesignerCanvas != null)
|
||||
{
|
||||
oldDesignerCanvas.LayoutUpdated -= new EventHandler(this.DesignerCanvas_LayoutUpdated);
|
||||
oldDesignerCanvas.MouseWheel -= new MouseWheelEventHandler(this.DesignerCanvas_MouseWheel);
|
||||
oldDesignerCanvas.LayoutUpdated -= this.DesignerCanvas_LayoutUpdated;
|
||||
oldDesignerCanvas.MouseDown -= this.DesignerCanvas_MouseRightButtonDown;
|
||||
oldDesignerCanvas.MouseUp -= this.DesignerCanvas_MouseRightButtonUp;
|
||||
oldDesignerCanvas.MouseMove -= this.DesignerCanvas_MouseMove;
|
||||
}
|
||||
|
||||
if (newDesignerCanvas != null)
|
||||
{
|
||||
newDesignerCanvas.LayoutUpdated += new EventHandler(this.DesignerCanvas_LayoutUpdated);
|
||||
newDesignerCanvas.MouseWheel += new MouseWheelEventHandler(this.DesignerCanvas_MouseWheel);
|
||||
newDesignerCanvas.LayoutUpdated += this.DesignerCanvas_LayoutUpdated;
|
||||
newDesignerCanvas.MouseRightButtonDown += this.DesignerCanvas_MouseRightButtonDown;
|
||||
newDesignerCanvas.MouseRightButtonUp += this.DesignerCanvas_MouseRightButtonUp;
|
||||
newDesignerCanvas.MouseMove += this.DesignerCanvas_MouseMove;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public static readonly DependencyProperty OffSetProperty =
|
||||
@@ -182,7 +186,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void DesignerCanvas_LayoutUpdated(object sender, EventArgs e)
|
||||
{
|
||||
//htzk
|
||||
try
|
||||
{
|
||||
|
||||
@@ -194,22 +197,41 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
Canvas.SetTop(this.zoomThumb, yOffset + this.ScrollViewer.VerticalOffset * scale);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 用于记录鼠标按下的点
|
||||
/// </summary>
|
||||
private Point _clickPoint = new Point(0, 0);
|
||||
|
||||
private void DesignerCanvas_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
_clickPoint = e.GetPosition((FrameworkElement)sender);
|
||||
Debug.WriteLine($"({_clickPoint.X},{_clickPoint.Y})");
|
||||
DesignerCanvas.Cursor = Cursors.Hand;
|
||||
}
|
||||
|
||||
private void DesignerCanvas_MouseWheel(object sender, EventArgs e)
|
||||
private void DesignerCanvas_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (Keyboard.IsKeyDown(Key.LeftCtrl) == false
|
||||
&& Keyboard.IsKeyDown(Key.RightCtrl) == false)
|
||||
DesignerCanvas.Cursor = Cursors.Arrow;
|
||||
}
|
||||
|
||||
private void DesignerCanvas_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.RightButton == MouseButtonState.Pressed)
|
||||
{
|
||||
return;
|
||||
FrameworkElement cabSender = (FrameworkElement)sender;
|
||||
//_clickPoint=new Point(scroll.ActualWidth/2,scroll.ActualHeight/2);
|
||||
double x;
|
||||
double y;
|
||||
Point p = e.MouseDevice.GetPosition(cabSender);
|
||||
|
||||
x = _clickPoint.X - p.X;
|
||||
y = _clickPoint.Y - p.Y;
|
||||
|
||||
ScrollViewer?.ScrollToHorizontalOffset(ScrollViewer.HorizontalOffset + x);
|
||||
ScrollViewer?.ScrollToVerticalOffset(ScrollViewer.VerticalOffset + y);
|
||||
}
|
||||
|
||||
MouseWheelEventArgs wheel = (MouseWheelEventArgs)e;
|
||||
|
||||
//divide the value by 10 so that it is more smooth
|
||||
double value = Math.Max(0, wheel.Delta / 10);
|
||||
value = Math.Min(wheel.Delta, 10);
|
||||
this.zoomSlider.Value += value;
|
||||
}
|
||||
|
||||
private void InvalidateScale(out double scale, out double xOffset, out double yOffset)
|
||||
|
||||
Reference in New Issue
Block a user