private void Port_MouseDown(object sender, MouseButtonEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { switch (HostCanvas.SplineMode) { case SplineModes.Nothing: HostCanvas.TempStartPort = this; HostCanvas.SplineMode = SplineModes.Second; break; case SplineModes.Second: if ( ( ( HostCanvas.TempStartPort.DataType.IsCastableTo(DataType) && HostCanvas.TypeSensitive && PortType == PortTypes.Output || DataType.IsCastableTo(HostCanvas.TempStartPort.DataType) && HostCanvas.TypeSensitive && PortType == PortTypes.Input ) // data types matching || (!HostCanvas.TypeSensitive) // data types must not match ) && PortType != HostCanvas.TempStartPort.PortType // is not same port type --> input to output or output to input && !Equals(ParentNode, HostCanvas.TempStartPort.ParentNode)) // is not same node { Connector connector; if (PortType == PortTypes.Output) { if (HostCanvas.TempStartPort.ConnectedConnectors.Count > 0) { if (!HostCanvas.TempStartPort.MultipleConnectionsAllowed) { foreach (var tempConnector in HostCanvas.TempStartPort.ConnectedConnectors) { tempConnector.RemoveFromCanvas(); } HostCanvas.TempStartPort.ConnectedConnectors.Clear(); } } connector = new Connector(HostCanvas, this, HostCanvas.TempStartPort); } else { if (ConnectedConnectors.Count > 0) { if (!MultipleConnectionsAllowed) { foreach (var tempConnector in ConnectedConnectors) { tempConnector.RemoveFromCanvas(); } ConnectedConnectors.Clear(); } } connector = new Connector(HostCanvas, HostCanvas.TempStartPort, this); } HostCanvas.ConnectorCollection.Add(connector); } HostCanvas.SplineMode = SplineModes.Nothing; HostCanvas.ClearTempLine(); break; } } else if (e.RightButton == MouseButtonState.Pressed) { foreach (var connector in ConnectedConnectors) { connector.RemoveFromCanvas(); } ConnectedConnectors.Clear(); } // e.Handled = true; }