コード例 #1
0
        private void CreateOrUpdateInRefrenceArdoner(IModel thisModel,
                                                     DependencyTreeItemControl treeItemControlOfReference,
                                                     IModel modelOfReference)
        {
            DeleteInReferences();

            CreateOrUpdateArdoner(thisModel, treeItemControlOfReference, modelOfReference, _inReferenceArdoner, false);
        }
コード例 #2
0
        private void CreateOrUpdateArdoner(IModel thisModel, DependencyTreeItemControl treeItemControlOfReference, IModel modelOfReference, Dictionary <Guid, BezierCurveAdorner> store, bool isLeft)
        {
            BezierCurveAdorner bezierCurveAdorner;
            var toRight        = 550 + (isLeft ? 0 : 20);
            var halfRight      = Math.Round((double)toRight / 2);
            var positionFactor = isLeft ? -1 : 1;

            var from       = new Point(toRight, _yOffset);
            var to         = treeItemControlOfReference.TranslatePoint(from, this);
            var controlOne = from;
            var controlTwo = to;

            var offsetFactor = Math.Ceiling((to.Y - from.Y) / 50);

            offsetFactor *= offsetFactor < 0 ? -1 : 1;
            var xOffset = 20 * (offsetFactor > 1 ? offsetFactor > halfRight ? halfRight : offsetFactor : 1) * positionFactor;

            controlOne.X = from.X + xOffset;
            controlOne.Y = from.Y;

            controlTwo.X = to.X + xOffset;
            controlTwo.Y = to.Y;

            if (store.ContainsKey(modelOfReference.Id))
            {
                bezierCurveAdorner = store[modelOfReference.Id];
                if (bezierCurveAdorner.IsSelected != IsSelected)
                {
                    DeleteArdoner(modelOfReference.Id);
                    return;
                }

                // Adding this item to InReference of referenced tree view item to draw the backline
                // Only update if some some point has changed
                if (bezierCurveAdorner.From != from ||
                    bezierCurveAdorner.ControlOne != controlOne ||
                    bezierCurveAdorner.ControlTwo != controlTwo ||
                    bezierCurveAdorner.To != to)
                {
                    bezierCurveAdorner.From       = from;
                    bezierCurveAdorner.ControlOne = controlOne;
                    bezierCurveAdorner.ControlTwo = controlTwo;
                    bezierCurveAdorner.To         = to;
                    bezierCurveAdorner.UpdateLayout();
                    _host.AdornerLayer.UpdateLayout();
                }
            }
            else
            {
                if (!treeItemControlOfReference.ReferenceControls.Contains(this))
                {
                    treeItemControlOfReference.ReferenceControls.Add(this);
                }

                bezierCurveAdorner = new BezierCurveAdorner(this, from, controlOne, controlTwo, to)
                {
                    IsHitTestVisible = false
                };
                bezierCurveAdorner.IsHarmfull = thisModel.IsHarmfull;
                bezierCurveAdorner.IsSelected = IsSelected;

                _host.AdornerLayer.Add(bezierCurveAdorner);
                store.Add(modelOfReference.Id, bezierCurveAdorner);
                _host.AdornerLayer.UpdateLayout();
            }
        }
コード例 #3
0
 private void CreateOrUpdateOutRefrenceArdoner(IModel thisModel,
                                               DependencyTreeItemControl teeItemControlOfReference,
                                               IModel modelOfReference)
 {
     CreateOrUpdateArdoner(thisModel, teeItemControlOfReference, modelOfReference, _outReferenceArdoner, true);
 }