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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • socketpair原理_socket方法

    socketpair原理_socket方法今天跟人谈到socketpair的问题,晚上回来写了个程序验证下自己的猜测!   先说说我的理解:socketpair创建了一对无名的套接字描述符(只能在AF_UNIX域中使用),描述符存储于一个二元数组,eg.s[2].这对套接字可以进行双工通信,每一个描述符既可以读也可以写。这个在同一个进程中也可以进行通信,向s[0]中写入,就可以从s[1]中读取(只能从s[1]中读取),也可以在

    2022年10月14日
    2
  • java 简单分页原理

    java 简单分页原理java 简单分页原理

    2022年4月23日
    71
  • T检验三种方法的区分

    T检验三种方法的区分之前的文章中SPSSAU已经给大家详细地介绍了方差分析,之后收到的一些反馈以及日常的答疑中,我们发现关于T检验三种方法的区分还有很多小伙伴搞不清楚,下面就结合着具体案例详细聊聊T检验的那点事。01.概念T检验是通过比较不同数据的均值,研究两组数据之间是否存在显著差异。02.分类不同的T检验方法适用于不同的分析场景,具体的分类如下:03….

    2022年6月19日
    32
  • linux rpm卸载包及其依赖,Linux下如何用rpm卸载软件 rpm依赖包强制卸载

    linux rpm卸载包及其依赖,Linux下如何用rpm卸载软件 rpm依赖包强制卸载以Mysql为例。#查看安装的Mysql版本sjgx2:/usr/local/mysql/bin#rpm-qa|grep-imysqlMySQL-client-5.1.17-0.glibc23MySQL-server-5.1.17-0.glibc23#卸载sjgx2:/usr/local/mysql/bin#rpm-eMySQL-client-5.1.17-0.glibc23s…

    2022年9月22日
    3
  • Pycharm安装使用TensorFlow[通俗易懂]

    Pycharm安装使用TensorFlow[通俗易懂]众多深度学习的初学者都会面临环境搭建的问题,本文根据亲身经历说明几个关键步骤:1.安装Pycharm,其中社区版免费,可以直接去pycharm官网下载安装https://www.jetbrains.com/pycharm/download/2.安装Anaconda,初学者不用急于安装最新版本的Anaconda(尤其是硬件设备并非最新的初学者,因为我注意到很多初学者的设备就是自己的笔记本或者台式机,一些并没有独立显卡,或者是NVIDIA730之类的台式机显卡,无法使用最新的深度学习包,以及一些CUD

    2022年8月29日
    1
  • python 自带slic代码分析

    python 自带slic代码分析一 python 中的 slic 函数 defslic image n segments 100 compactness 10 max iter 10 sigma 0 spacing None multichannel True convert2lab None enforce connectivity True min size fact

    2025年7月21日
    4

发表回复

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

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