protected override void OnWindowPositionChanged(Rect rcBoundingBox)
        {
            base.OnWindowPositionChanged(rcBoundingBox);

            if (ParentScrollViewer == null)
            {
                return;
            }

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

            var intersect = Rect.Intersect(scrollRect, tr.TransformBounds(rcBoundingBox));

            if (!intersect.IsEmpty)
            {
                tr        = ParentScrollViewer.TransformToDescendant(this);
                intersect = tr.TransformBounds(intersect);
            }
            else
            {
                intersect = new Rect();
            }

            int x1 = (int)Math.Round(intersect.Left);
            int y1 = (int)Math.Round(intersect.Top);
            int x2 = (int)Math.Round(intersect.Right);
            int y2 = (int)Math.Round(intersect.Bottom);

            SetRegion(x1, y1, x2, y2);
        }
    protected override void OnWindowPositionChanged(Rect rcBoundingBox)
    {
        DpiScale dpiScale = VisualTreeHelper.GetDpi(this);

        base.OnWindowPositionChanged(rcBoundingBox);
        Rect newRect = ScaleRectDownFromDPI(rcBoundingBox, dpiScale);
        Rect finalRect;

        if (ParentScrollViewer != null)
        {
            ParentScrollViewer.ScrollChanged += ParentScrollViewer_ScrollChanged;
            ParentScrollViewer.SizeChanged   += ParentScrollViewer_SizeChanged;
            ParentScrollViewer.Loaded        += ParentScrollViewer_Loaded;
        }
        if (Scrolling || Resizing)
        {
            if (ParentScrollViewer == null)
            {
                return;
            }
            MatrixTransform tr = RootVisual.TransformToDescendant(ParentScrollViewer) as MatrixTransform;

            var scrollRect = new Rect(new Size(ParentScrollViewer.ViewportWidth, ParentScrollViewer.ViewportHeight));
            var c          = tr.TransformBounds(newRect);

            var intersect = Rect.Intersect(scrollRect, c);
            if (!intersect.IsEmpty)
            {
                tr        = ParentScrollViewer.TransformToDescendant(this) as MatrixTransform;
                intersect = tr.TransformBounds(intersect);
                finalRect = ScaleRectUpToDPI(intersect, dpiScale);
            }
            else
            {
                finalRect = intersect = new Rect();
            }

            int x1 = (int)Math.Round(finalRect.X);
            int y1 = (int)Math.Round(finalRect.Y);
            int x2 = (int)Math.Round(finalRect.Right);
            int y2 = (int)Math.Round(finalRect.Bottom);
            SetRegion(x1, y1, x2, y2);
            this.Scrolling = false;
            this.Resizing  = false;
        }
        LocationChanged?.Invoke(this, new EventArgs());
    }
Esempio n. 3
0
        protected override void OnWindowPositionChanged(Rect rcBoundingBox)
        {
            DpiScale dpiScale = new DpiScale()
            {
                DpiScaleX = RenderSettings.dpiScaleX, DpiScaleY = RenderSettings.dpiScaleY
            };

            base.OnWindowPositionChanged(rcBoundingBox);

            if (ParentScrollViewer == null)
            {
                return;
            }

            Rect             newRect = ScaleRectDownFromDPI(rcBoundingBox, dpiScale);
            GeneralTransform tr      = RootVisual.TransformToDescendant(ParentScrollViewer);
            var scrollRect           = new Rect(new Size(ParentScrollViewer.ViewportWidth, ParentScrollViewer.ViewportHeight));

            var intersect = Rect.Intersect(scrollRect, tr.TransformBounds(newRect));

            if (!intersect.IsEmpty)
            {
                tr        = ParentScrollViewer.TransformToDescendant(this);
                intersect = tr.TransformBounds(intersect);
                intersect = ScaleRectUpToDPI(intersect, dpiScale);
            }
            else
            {
                intersect = new Rect();
            }

            int x1 = (int)Math.Round(intersect.Left);
            int y1 = (int)Math.Round(intersect.Top);
            int x2 = (int)Math.Round(intersect.Right);
            int y2 = (int)Math.Round(intersect.Bottom);

            SetRegion(x1, y1, x2, y2);
        }