WPF 用代码实现WrapPanel右侧自动对齐(解决多余空白问题)

WPF 用代码实现WrapPanel右侧自动对齐(解决多余空白问题)未处理前效果:处理后效果:<BorderBackground=”{StaticResourceBorderBg}”BorderThickness=”2″BorderBrush=”{StaticResourceBorderBrush}”CornerRadius=”5″Padding=”5″x:Name=”SvKeyWords”Margi…

大家好,又见面了,我是你们的朋友全栈君。

未处理前效果: 

 WPF 用代码实现WrapPanel右侧自动对齐(解决多余空白问题)

WPF 用代码实现WrapPanel右侧自动对齐(解决多余空白问题)

处理后效果: 

WPF 用代码实现WrapPanel右侧自动对齐(解决多余空白问题)

WPF 用代码实现WrapPanel右侧自动对齐(解决多余空白问题)

<Border  Background="{StaticResource BorderBg}"  BorderThickness="2" BorderBrush="{StaticResource BorderBrush}" CornerRadius="5" Padding="5"   x:Name="SvKeyWords" Margin="142,0,134,58" Height="175" VerticalAlignment="Bottom" Visibility="Collapsed"  Opacity="0.98">
       <ScrollViewer VerticalScrollBarVisibility="Auto" >
            <WrapPanel x:Name="WpKeyWords"/>
       </ScrollViewer>
 </Border>
        private void AlignWrapPanelChild()
        {
            //WrapPanel 所有子元素
            var lst = (from object child in WpKeyWords.Children select child as Border).ToList();
            if (lst.Count > 1)
            {
                //每次 重置 子元素宽度
                foreach (var t in lst)
                {
                    t.Width = double.NaN;
                    t.UpdateLayout();
                }

                for (var i = 0; i < lst.Count - 1; i++)
                {
                    //找到每行最后一个子元素
                    var child = lst[i];
                    var nxtChild = lst[i + 1];
                    var plWidth = WpKeyWords.ActualWidth;
                    var childPoint = child.TranslatePoint(new Point(0, 0), WpKeyWords);
                    var nxtChildPoint = nxtChild.TranslatePoint(new Point(0, 0), WpKeyWords);
                    if (nxtChildPoint.X < childPoint.X)
                    {
                        //找出同一行的子元素
                        var tempLst = lst.Where(b => b.TranslatePoint(new Point(0, 0), WpKeyWords).Y.Equals(childPoint.Y)).ToList();
                        //算出多余的空白宽度
                        var surplusWidth = plWidth - childPoint.X - child.Margin.Right - child.ActualWidth;
                        var averageAddWidth = surplusWidth / tempLst.Count;
                        //将多余的宽度平均分给当前行每个子元素
                        foreach (var b in tempLst)
                        {
                            b.Width = b.ActualWidth + averageAddWidth;
                            b.UpdateLayout();
                        }
                    }

                }
            }
        }

在数据绑定或者初始化控件后调用 

private void do()
{
    ……
    WpKeyWords.SizeChanged += delegate { AlignWrapPanelChild(); };
    AlignWrapPanelChild();
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163325.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 智慧工地 安全帽识别系统

    智慧工地 安全帽识别系统随着时代的发展科技也越来越发达,近些年来建筑行业在我国怦然兴起,关于建筑方面的隐患也日益增加,为此北京富维图像公司研发了一款智慧工地安全帽识别这项技术,可以有效的避免一些事故的发生。智慧工地安全帽识别这项技术它能有效识别作业过程中突发的危险以及预防危险的到临,以下是关于安全帽识别系统的详细介绍。第一北京富维图像公司对智慧工地安全帽识别系统采用人脸识别功能,可360°识别工作人员是否佩戴安全帽,可以通过前段摄像机进…

    2022年5月12日
    56
  • initramfs实作「建议收藏」

    initramfs实作「建议收藏」这个是翻译来的,原文地址:http://www.landley.net/writing/rootfs-howto.html //TechTip:Howtouseinitramfs.怎样使用initramfs 工作过程简述在2.6kernel启动时,它把rootfs作为它的第一个文件系统挂载(注意:这里的rootfs是真名!!!不是roo

    2022年8月11日
    7
  • SQL Server 2019基础配置

    SQL Server 2019基础配置SQLServer2019基础配置1、在开始菜单中选中安装的SQLServer2019配置管理器,打开。2、点击SQLServer网络配置->MSSQLSERVER的协议->启用TCP/IP协议。示例:3、启动管理应用。示例:4、默认直接点击连接即可。示例:5、发现有如图所示的结果表示连接成功。示例:6、单击->右键->属性。示例:7…

    2022年7月20日
    16
  • 手眼标定过程记录

    手眼标定过程记录手眼标定过程记录============================================================================================以下四个变量是最重要的数据rvecs_rb2gripper,tvecs_rb2gripperrvecs_cam,tvecs_cam1.首先排查机械臂末端到底座的旋转平移

    2022年5月27日
    36
  • 线性代数行列式方程求解(正交矩阵的行列式)

    线性代数行列式求值算的可真是让人CPU疼,但计算机是不累的,所以用一个c++程序帮助你验证求解行列式的值吧。本文介绍了三种算法,虽然还没有完成–.–

    2022年4月13日
    157
  • python解析json文件

    python解析json文件认识json数据json有两种数据结构:对象和数组。对象:用大括号表示,由键值对组成,每个键值对用逗号隔开。其中key必须为字符串且是双引号,value可以是多种数据类型。数组:用中括号表示,每个元素之间用逗号隔开。json中的字符串都要用双括号表示。json数据可以嵌套表示出结构更加复杂的数据。json格式与python格式的对应Python JSONd…

    2022年9月25日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号