mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-04-02 15:16:37 +08:00
右键拖动画布
This commit is contained in:
@@ -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