common/FrameworkExtension.cs

(开头部分) 2KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Windows.Controls;
using System.Windows;
using System.Windows.Media;
using System.Linq;

namespace tablegen2
{
    internal static class FrameworkExtension
    {
        public static Vector GetOffsetFromRelativeParent(this FrameworkElement e, FrameworkElement p)
        {
            p.UpdateLayout();

            var r = new Vector(0, 0);
            var t = e;
            while (t != p)
            {
                if (t == null)
                    throw new Exception("GetOffsetFromRelativeParent 异常!");

                var v = VisualTreeHelper.GetOffset(t);
                r += v;
                t = VisualTreeHelper.GetParent(t) as FrameworkElement;
            }

            return r;
        }

        public static void MakesureChildVisible(this ScrollViewer sv, FrameworkElement child)
        {
            if (child == null)
                return;

            var reserve = 20;

            var p = child.GetOffsetFromRelativeParent(sv);
            p.X += sv.HorizontalOffset;
            p.Y += sv.VerticalOffset;

            if (sv.HorizontalScrollBarVisibility != ScrollBarVisibility.Disabled)
            {
                var x1 = p.X - reserve;
                var x2 = p.X + child.ActualWidth + reserve;
                var offsetx = sv.HorizontalOffset;
                var width = sv.ActualWidth;
                if (x1 < offsetx)
                    offsetx = x1;
                else if (offsetx + width < x2)
                    offsetx = x2 - width;
                sv.ScrollToHorizontalOffset(offsetx);
            }

            if (sv.VerticalScrollBarVisibility != ScrollBarVisibility.Disabled)
            {
                var y1 = p.Y - reserve;
                var y2 = p.Y + child.ActualHeight + reserve;
                var offsety = sv.VerticalOffset;
                var height = sv.ActualHeight;
                if (y1 < offsety)
后面还有 13 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。