protected override void Activate(ModelItem item) { designObject = item.GetCurrentValue() as LinkableControl;//获得被点击的控件对象 if (designObject != null) { designCanvas = designObject.Parent as Panel; DesignerView v = DesignerView.FromContext(Context); adorner = new ControlAdorner(designObject); adorner.RenderTransform = new ScaleTransform(v.ZoomLevel, v.ZoomLevel); foreach (var pin in adorner.Children) { pin.MouseLeftButtonDown += new MouseButtonEventHandler(Pin_MouseLeftButtonDown); //按下左键选中hitPin,开始拖动 pin.MouseMove += new MouseEventHandler(Pin_MouseMove); //移动鼠标,开始找寻目标连接节点 } AdornerPanel.SetAdornerHorizontalAlignment(adorner, AdornerHorizontalAlignment.Stretch); AdornerPanel.SetAdornerVerticalAlignment(adorner, AdornerVerticalAlignment.Stretch); _panel.Children.Add(adorner); Adorners.Add(_panel); v.ZoomLevelChanged += (s, e) => { adorner.RenderTransform = new ScaleTransform(v.ZoomLevel, v.ZoomLevel); }; } base.Activate(item); }
void pinAdorner_MouseUp(object sender, MouseButtonEventArgs e) { var pinAdorner = sender as PinAdorner; if (pinAdorner.HitPin != null) { LinkableControl targetObject = pinAdorner.HitLinkableControl; LinkPin lp1 = pinAdorner.SourcePin; LinkPin lp2 = pinAdorner.HitPin; ConnectInfo info1 = lp1.GetInfo(); ConnectInfo info2 = lp2.GetInfo(); LinkLine line = new LinkLine(info1, info2); //Panel.SetZIndex(line, designCanvas.Children.Count); Binding bi1 = new Binding(omap[info1.Orient]); bi1.ElementName = designObject.Name; line.SetBinding(LinkLine.OriginInfoProperty, bi1); Binding bi2 = new Binding(omap[info2.Orient]); bi2.ElementName = targetObject.Name; line.SetBinding(LinkLine.TargetInfoProperty, bi2); var CanvasModelItem = AdornerProperties.GetModel(adorner).Parent; ModelItemCollection myControls = CanvasModelItem.Properties["Children"].Collection; ModelItem myLinkLine = myControls.Add(line); } if (pinAdorner.HitLinkableControl != null) { pinAdorner.HitLinkableControl.IsLinkDragOver = false; } hitPin = null; if (adorner.IsMouseCaptured) { adorner.ReleaseMouseCapture(); } _panel.Children.Remove(pinAdorner); }