右键拖动画布

This commit is contained in:
艾竹
2023-03-12 15:26:58 +08:00
parent fb7858fe74
commit e2753b0bff
16 changed files with 711 additions and 142 deletions

View File

@@ -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)