Esempio n. 1
0
        protected override void OnWindowPositionChanged(Rect rcBoundingBox)
        {
            base.OnWindowPositionChanged(rcBoundingBox);

            if (ParentScrollViewer == null)
            {
                return;
            }

            try
            {
                GeneralTransform tr = ParentScrollViewer.TransformToAncestor(MainWindow);
                var scrollRect      = new Rect(new Size(ParentScrollViewer.ViewportWidth, ParentScrollViewer.ViewportHeight));
                scrollRect = tr.TransformBounds(scrollRect);

                var intersect = Rect.Intersect(scrollRect, rcBoundingBox);
                if (!intersect.IsEmpty)
                {
                    tr        = MainWindow.TransformToDescendant(this);
                    intersect = tr.TransformBounds(intersect);
                }

                SetRegion(intersect);
            }
            catch (Exception e)
            {
                Console.WriteLine($"{e.GetType().ToString()}: {e.Message}");
            }
        }
        protected override void OnWindowPositionChanged(Rect rcBoundingBox)
        {
            if (_lastBoundingBox.Equals(rcBoundingBox))
            {
                return;
            }
            _lastBoundingBox = rcBoundingBox;
            Graphics g      = this.Child.CreateGraphics();
            double   xScale = g.DpiX / 96.0;
            double   yScale = g.DpiY / 96.0;

            base.OnWindowPositionChanged(rcBoundingBox);
            //rcBoundingBox = new Rect(new Point(rcBoundingBox.X, rcBoundingBox.Y), new Size( rcBoundingBox.Width, rcBoundingBox.Height));
            if (ParentScrollViewer == null && !TryFindScrollViewer())
            {
                return;
            }

            GeneralTransform tr = ParentScrollViewer.TransformToAncestor(MainWindow);
            var scrollRect      = new Rect(new Size(ParentScrollViewer.ViewportWidth, ParentScrollViewer.ViewportHeight));

            scrollRect = tr.TransformBounds(scrollRect);
            scrollRect = new Rect(new Point(scrollRect.X * xScale, scrollRect.Y * yScale), new Size(scrollRect.Width * xScale, scrollRect.Height * yScale));
            var intersect = Rect.Intersect(scrollRect, rcBoundingBox);

            if (intersect.Equals(rcBoundingBox))
            {
                if (!_fullyIntersect)
                {
                    InvalidateVisual();
                }

                _fullyIntersect = true;
            }
            else
            {
                _fullyIntersect = false;
            }

            if (!intersect.IsEmpty)
            {
                tr        = MainWindow.TransformToDescendant(this);
                intersect = new Rect(new Point(intersect.X / xScale, intersect.Y / yScale), new Size(intersect.Width / xScale, intersect.Height / yScale));
                intersect = tr.TransformBounds(intersect);
                intersect = new Rect(new Point(intersect.X * xScale, intersect.Y * yScale), new Size(intersect.Width * xScale, intersect.Height * yScale));
                //InvalidateVisual();
            }
            SetRegion(intersect);
        }