Exemple #1
0
        protected override void OnRender(DrawingContext drawingContext)
        {
            if (!_from.IsVisible || !_to.IsVisible)
            {
                return;
            }

            var posFrom = _from.TranslatePoint(new Point(_from.DesiredSize.Width, _from.DesiredSize.Height / 2), AdornedElement);
            var posTo   = _to.TranslatePoint(new Point(_to.DesiredSize.Width, _to.DesiredSize.Height / 2), AdornedElement);

            var midFrom = new Point(posFrom.X + 8, posFrom.Y);
            var midTo   = new Point(posFrom.X + 8, posTo.Y);

            var g    = new PathGeometry();
            var path = new PathFigure();

            path.StartPoint = posFrom;
            path.Segments.Add(new LineSegment(midFrom, true));
            path.Segments.Add(new LineSegment(midTo, true));
            path.Segments.Add(new LineSegment(posTo, true));
            // Triangle
            if (_added)
            {
                path.Segments.Add(new LineSegment(new Point(posTo.X + 2, posTo.Y + 2), true));
                path.Segments.Add(new LineSegment(new Point(posTo.X + 2, posTo.Y - 2), true));
                path.Segments.Add(new LineSegment(posTo, true));
            }

            g.Figures.Add(path);

            drawingContext.DrawGeometry(null, _added ? _penAdded : _penRemoved, g);
        }
        protected override void OnRender(System.Windows.Media.DrawingContext dc)
        {
            var posFrom = _from.TranslatePoint(new Point(0, 0), AdornedElement);
            var posTo   = _to.TranslatePoint(new Point(0, 0), AdornedElement);

            if (posFrom.Y >= posTo.Y)
            {
                posFrom.X += _from.DesiredSize.Width;
            }
            var mid = posTo.Y + _to.DesiredSize.Height / 2;

            posFrom.Y = mid - 10;
            posTo.Y   = mid + 10;

            var record = (Record)_from.DataContext;

            dc.DrawRectangle(record.State == null ? (Brush)_invalidBrush : new SolidColorBrush(ColorGenerator.GetColor(record.State)),
                             null, new Rect(posFrom, posTo));
        }
Exemple #3
0
        protected override void OnRender(DrawingContext drawingContext)
        {
            var posFrom = _from.TranslatePoint(new Point(0, 0), AdornedElement);
            var posTo   = _to.TranslatePoint(new Point(0, 0), AdornedElement);

            var topFrom = posFrom.Y;
            var topTo   = posTo.Y;

            var leftFrom = posFrom.X;
            var leftTo   = posTo.X;

            var g    = new PathGeometry();
            var path = new PathFigure();

            PathSegment[] segments;

            if (topFrom == topTo)
            {
                path.StartPoint = new Point(leftFrom + _from.DesiredSize.Width, topFrom + _from.DesiredSize.Height / 2 - 4);
                segments        =
                    new PathSegment[]
                {
                    new LineSegment(new Point(leftTo, topTo + _to.DesiredSize.Height / 2 - 4), true),
                    // Triangle
                    new LineSegment(new Point(leftTo - 2, topTo + _to.DesiredSize.Height / 2 - 6), true),
                    new LineSegment(new Point(leftTo - 2, topTo + _to.DesiredSize.Height / 2 - 2), true),
                    new LineSegment(new Point(leftTo, topTo + _to.DesiredSize.Height / 2 - 4), true),
                };
            }
            else
            {
                if (leftTo > leftFrom + _from.DesiredSize.Width + 8)
                {
                    leftFrom        = leftFrom + _from.DesiredSize.Width;
                    path.StartPoint = new Point(leftFrom, topFrom + _from.DesiredSize.Height / 2 + 4);
                    segments        =
                        new PathSegment[]
                    {
                        new LineSegment(new Point(leftFrom + 7, topFrom + _from.DesiredSize.Height / 2 + 4), true),

                        new LineSegment(new Point(leftFrom + 7, topTo + _to.DesiredSize.Height / 2 - 4), true),
                        //new LineSegment(new Point(leftFrom - 7, topFrom + _from.DesiredSize.Height), true),
                        //new LineSegment(new Point(leftTo - 7, topFrom + _from.DesiredSize.Height), true),
                        new LineSegment(new Point(leftTo - 7, topTo + _to.DesiredSize.Height / 2 - 4), true),
                        new LineSegment(new Point(leftTo, topTo + _to.DesiredSize.Height / 2 - 4), true),
                        // Triangle
                        new LineSegment(new Point(leftTo - 2, topTo + _to.DesiredSize.Height / 2 - 6), true),
                        new LineSegment(new Point(leftTo - 2, topTo + _to.DesiredSize.Height / 2 - 2), true),
                        new LineSegment(new Point(leftTo, topTo + _to.DesiredSize.Height / 2 - 4), true),
                    };
                }
                else
                {
                    path.StartPoint = new Point(leftFrom, topFrom + _from.DesiredSize.Height / 2 + 4);
                    segments        =
                        new PathSegment[]
                    {
                        new LineSegment(new Point(leftFrom - 7, topFrom + _from.DesiredSize.Height / 2 + 4), true),

                        new LineSegment(new Point(leftFrom - 7, topTo + _to.DesiredSize.Height / 2 - 4), true),
                        //new LineSegment(new Point(leftFrom - 7, topFrom + _from.DesiredSize.Height), true),
                        //new LineSegment(new Point(leftTo - 7, topFrom + _from.DesiredSize.Height), true),
                        new LineSegment(new Point(leftTo - 7, topTo + _to.DesiredSize.Height / 2 - 4), true),
                        new LineSegment(new Point(leftTo, topTo + _to.DesiredSize.Height / 2 - 4), true),
                        // Triangle
                        new LineSegment(new Point(leftTo - 2, topTo + _to.DesiredSize.Height / 2 - 6), true),
                        new LineSegment(new Point(leftTo - 2, topTo + _to.DesiredSize.Height / 2 - 2), true),
                        new LineSegment(new Point(leftTo, topTo + _to.DesiredSize.Height / 2 - 4), true),
                    };
                }
            }

            path.Segments.Clear();
            foreach (var segment in segments)
            {
                path.Segments.Add(segment);
            }

            g.Figures.Add(path);

            drawingContext.DrawGeometry(null, _pen, g);
        }