using FlowChartModule.绘制模块; using Prism.Ioc; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using static System.Formats.Asn1.AsnWriter; namespace FlowChartModule.Views { /// /// ModuleView.xaml 的交互逻辑 /// public partial class ModuleView : UserControl { public Element _element; public DrawModule drawModule; double scale=1; private Point _mousedownPoint; private bool _isMouseDown=false; public ModuleView(IContainerProvider containerProvider) { InitializeComponent(); drawModule=containerProvider.Resolve(); drawModule.Canvas = this.DrawingContainer; this.MouseUp += ModuleView_MouseUp; //Pantransform.X = -10000; //Pantransform.Y = -10000; } private void ModuleView_MouseUp(object sender, MouseButtonEventArgs e) { ParentCanvasGrid.ReleaseMouseCapture(); Connection_Point._isMouseDown = false; _isMouseDown = false; drawModule.DrawRectangle(e.GetPosition(this.DrawingContainer)); if ( drawModule.CurrentFlowClickElement != null ) { drawModule.CurrentFlowClickElement.connection_Lines.Remove(drawModule.Connection_Line); DrawingContainer.Children.Remove(drawModule.Connection_Line.path); } drawModule.CurrentFlowClickElement = null; drawModule.isMouseDown = false; //drawModule.Connection_Line } private void Window_PreviewMouseWheel(object sender, MouseWheelEventArgs e) { if ( Keyboard.IsKeyDown(Key.LeftCtrl) ) { if ( e.Delta < 0 ) { scale -= 0.01; } else { scale += 0.01; } // scale += (double)e.Delta / 35000; ScaleTransform transfrom = new ScaleTransform(); transfrom.ScaleX = transfrom.ScaleY = scale; this.DrawingContainer.RenderTransform = transfrom; } } private Pen CreateAndFreezePen() { // 创建Pen Pen pen = new Pen(Brushes.Black, 1); // 冻结Pen if ( pen.CanFreeze ) { pen.Freeze(); } return pen; } private void ParentCanvasGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (!drawModule.isMouseDown) { _isMouseDown = true; _mousedownPoint = e.GetPosition(this.ParentCanvasGrid); ParentCanvasGrid.CaptureMouse(); } if ( drawModule.CurrentFlowClickElement != null && Connection_Point._isMouseDown ) { drawModule.Connection_Line= new Connection_Line(DrawingContainer); Point position; Point position1 = drawModule.CurrentFlowClickElement.left.ellipse.TransformToVisual(this.DrawingContainer).Transform(new Point(0, 0)); Point position2 = drawModule.CurrentFlowClickElement.right.ellipse.TransformToVisual(this.DrawingContainer).Transform(new Point(0, 0)); Point position3 = drawModule.CurrentFlowClickElement.up.ellipse.TransformToVisual(this.DrawingContainer).Transform(new Point(0, 0)); Point position4 = drawModule.CurrentFlowClickElement.down.ellipse.TransformToVisual(this.DrawingContainer).Transform(new Point(0, 0)); Point position5= e.GetPosition(this.DrawingContainer); bool isHas = false; if ( Math.Abs(position1.X - position5.X) < 40 && Math.Abs(position1.Y - position5.Y) < 40 && !isHas ) { isHas = true; position =new Point(position1.X+6,position1.Y+6); } if ( Math.Abs(position2.X - position5.X) < 40 && Math.Abs(position2.Y - position5.Y) < 40 && !isHas ) { isHas = true; position = new Point(position2.X + 6, position2.Y + 6); } if ( Math.Abs(position3.X - position5.X) < 40 && Math.Abs(position3.Y - position5.Y) < 40 && !isHas ) { isHas = true; position = new Point(position3.X + 6, position3.Y + 6); } if ( Math.Abs(position4.X - position5.X) < 40 && Math.Abs(position4.Y - position5.Y) < 40 && !isHas ) { isHas = true; position = new Point(position4.X + 6, position4.Y + 6); } if ( isHas ) { drawModule.Connection_Line.curveModel.StartPoint = position; drawModule.Connection_Line.curveModel.EndPoint = position; drawModule.Connection_Line.Drewbezier(this.DrawingContainer); drawModule.Connection_Line.Startelement = drawModule.CurrentFlowClickElement; drawModule.CurrentFlowClickElement.connection_Lines.Add(drawModule.Connection_Line); } } } private void ParentCanvasGrid_MouseMove(object sender, MouseEventArgs e) { if (_isMouseDown) { Point point=e.GetPosition(ParentCanvasGrid); Pantransform.X -= _mousedownPoint.X - point.X; Pantransform.Y -= _mousedownPoint.Y - point.Y; _mousedownPoint = point; } if ( drawModule.CurrentFlowClickElement != null &&Connection_Point._isMouseDown) { drawModule.Connection_Line.curveModel.EndPoint = e.GetPosition(this.DrawingContainer); drawModule.Connection_Line.DrewbezierRef(this.DrawingContainer); } } } }