public ConnectorAdorner(MyCanvas designer, Connector sourceConnector) : base(designer) { this.designerCanvas = designer; this.sourceConnector = sourceConnector; drawingPen = new Pen(Brushes.LightSlateGray, 1); drawingPen.LineJoin = PenLineJoin.Round; this.Cursor = Cursors.Cross; }
public Connection(Connector source, Connector sink, string strContent , List<string> m_Connection) { Source = source; Sink = sink; Brach = m_Connection; SelectedBrach = strContent; base.Loaded += new RoutedEventHandler(Connection_Loaded); base.Unloaded += new RoutedEventHandler(Connection_Unloaded); }
/// <summary> /// 测试是否已经命中元素 /// </summary> /// <param name="hitPoint">鼠标点击的坐标</param> private void HitTesting(Point hitPoint) { bool hitConnectorFlag = false; DependencyObject hitObject = designerCanvas.InputHitTest(hitPoint) as DependencyObject; while (hitObject != null && hitObject != sourceConnector.ParentDesignerItem && hitObject.GetType() != typeof(MyCanvas)) { if (hitObject is Connector) { HitConnector = hitObject as Connector; hitConnectorFlag = true; } if (hitObject is DesignerItem) { HitDesignerItem = hitObject as DesignerItem; var parentitem = hitDesignerItem.FindVisualTreeAncestor(x => x is Connector); Control connectorDecorator = HitDesignerItem.Template.FindName("PART_ConnectorDecorator", HitDesignerItem) as Control; List<DependencyObject> item = connectorDecorator.FindVisualTreeChildren(x => x is Connector); foreach (var connector in item) { var data = connector as Connector; if (Math.Abs(data.Position.X - hitPoint.X) < 18 && Math.Abs(data.Position.Y - hitPoint.Y) < 18) { hitConnector = data; hitConnectorFlag = true; break; } } if (!hitConnectorFlag) { HitConnector = null; } return; } hitObject = VisualTreeHelper.GetParent(hitObject); } HitConnector = null; HitDesignerItem = null; }
/// <summary> /// 拖拽开始 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void thumbDragThumb_DragStarted(object sender, DragStartedEventArgs e) { this.HitDesignerItem = null; this.HitConnector = null; this.pathGeometry = null; this.Cursor = Cursors.Cross; this.connection.StrokeDashArray = new DoubleCollection(new double[] { 1, 2 }); if (sender == sourceDragThumb) { fixConnector = connection.Sink; dragConnector = connection.Source; } else if (sender == sinkDragThumb) { dragConnector = connection.Sink; fixConnector = connection.Source; } }