亟需展示寻觅火爆词,供给出示寻觅火爆词

在做游民星空的追寻页面包车型大巴时候,要求出示寻觅火热词,再次回到的是2个string数组的款型,然后以1种错落的法子显示,每贰个Item的轻重缓急都和火热词长度一致,然后1行放不下之后就换行,描述的不太直观,直接看图好了。

在做游民星空的检索页面包车型地铁时候,须求出示搜索热点词,再次来到的是三个string数组的方式,然后以一种错落的办法突显,每一个Item的深浅都和火热词长度1致,然后一行放不下之后就换行,描述的不太直观,直接看图好了。

澳门永利备用网址 1

澳门永利备用网址 2

当自身有其壹布局必要的时候笔者首先就想开了看过的一篇ms-uap的博客-经过Measure
&
Arrange达成UWP瀑布流布局
 ,自定义ItemsPanel能够知足本身的需求

当作者有那几个布局供给的时候自个儿先是就悟出了看过的壹篇ms-uap的博客-通过Measure
&
Arrange达成UWP瀑布流布局
 ,自定义ItemsPanel能够满意自己的急需

先是新建1个类承继Panel,然后重写Panel里的八个措施MeasureOverride 和
ArrangeOverride

第叁新建二个类承袭Panel,然后重写Panel里的多少个点子MeasureOverride 和
ArrangeOverride

贴出MSDN的原版解释

贴出MSDN的原版解释

When overridden in a derived class, measures the size in layout required
for child elements and determines a size for
the FrameworkElement.aspx) derived
class.

When overridden in a derived class, measures the size in layout required
for child elements and determines a size for
the FrameworkElement.aspx) derived
class.

When overridden in a derived class, positions child elements and
determines a size for
FrameworkElement.aspx) derived
class.

When overridden in a derived class, positions child elements and
determines a size for
FrameworkElement.aspx) derived
class.

 

 

本人的知晓是MeasureOverride
是计算布局中有所的子控件须求的尺寸之和并赶回那么些值,availableSize参数是父控件提供的可用大小,关键是一个钱打二17个结

本身的明亮是MeasureOverride
是测算布局中保有的子控件须要的分寸之和并回到这几个值,availableSize参数是父控件提供的可用大小,关键是计量

而ArrangeOverride对子成分实行布局操作并操纵布局须要的大大小小,首即便布局。实际上运维的时候也是先进行MeasureOverride方法然后推行ArrangeOverride方法。

而ArrangeOverride对子成分进行布局操作并决定布局需求的轻重缓急,主假若布局。实际上运转的时候也是先实践MeasureOverride方法然后施行ArrangeOverride方法。

 

 

在MeasureOverride中能够赢得每一个子控件的大小(宽度和惊人),通过传过来的availableSize获得父控件的可用大小,然后正是轻巧的数学了,Panel给自个儿的认为像是一张有坐标系的图形,通过坐标在地点布局子控件

在MeasureOverride中能够收获每个子控件的轻重缓急(宽度和冲天),通过传过来的availableSize获得父控件的可用大小,然后正是轻易的数学了,Panel给自己的感到像是一张有坐标系的图形,通过坐标在地点布局子控件

此处的布局逻辑是,将子控件横向排列,并记下当前已布局的子控件的升幅和,直到有下一个子控件的上涨的幅度+已布局子控件的上涨的幅度和>父控件的上涨的幅度时,换行,也便是把Y坐标+=控件的高度(那里控件的莫斯中国科学技术大学学皆以平等的)

那里的布局逻辑是,将子控件横向排列,并记下当前已布局的子控件的上升的幅度和,直到有下二个子控件的增进率+已布局子控件的增加率和>父控件的急剧时,换行,也正是把Y坐标+=控件的高度(那里控件的莫斯中国科学技术大学学都以平等的)

 

 

  protected override Size MeasureOverride(Size availableSize)
        { 
            //可用空间大小
            Size usefulSize = new Size(availableSize.Width, double.PositiveInfinity);

            //控件高度
            double y = 0;
            double x = 0;

            foreach (UIElement item in Children)
            {
                item.Measure(usefulSize);

                Size itemSize = item.DesiredSize;
                double itemWidth = itemSize.Width;

                y = (itemSize.Height) > y ? itemSize.Height : y;

                //加入该子控件后一行满了
                if (x + itemSize.Width > availableSize.Width)
                {
                    x = 0;
                    y += itemSize.Height;
                }
                x += itemSize.Width;
            }

            return new Size(availableSize.Width, y);
        }

        /// <summary>
        /// 为每个子控件布局
        /// </summary>
        /// <param name="finalSize"></param>
        /// <returns></returns>
        protected override Size ArrangeOverride(Size finalSize)
        { 
            //记录横坐标
            double x = 0.0;
            double y = 0.0;

            foreach (UIElement item in Children)
            {
                Size itemSize = item.DesiredSize;
                double itemWidth = itemSize.Width;

                //加入该控件后一行满了
                if (x + itemSize.Width > finalSize.Width)
                {
                    x = 0;
                    y += itemSize.Height;
                }
                //控件的坐标
                Point pt = new Point(x, y);

                //控件布局
                item.Arrange(new Rect(pt, itemSize));
                x += itemSize.Width;
            }

            return finalSize;
        }
  protected override Size MeasureOverride(Size availableSize)
        { 
            //可用空间大小
            Size usefulSize = new Size(availableSize.Width, double.PositiveInfinity);

            //控件高度
            double y = 0;
            double x = 0;

            foreach (UIElement item in Children)
            {
                item.Measure(usefulSize);

                Size itemSize = item.DesiredSize;
                double itemWidth = itemSize.Width;

                y = (itemSize.Height) > y ? itemSize.Height : y;

                //加入该子控件后一行满了
                if (x + itemSize.Width > availableSize.Width)
                {
                    x = 0;
                    y += itemSize.Height;
                }
                x += itemSize.Width;
            }

            return new Size(availableSize.Width, y);
        }

        /// <summary>
        /// 为每个子控件布局
        /// </summary>
        /// <param name="finalSize"></param>
        /// <returns></returns>
        protected override Size ArrangeOverride(Size finalSize)
        { 
            //记录横坐标
            double x = 0.0;
            double y = 0.0;

            foreach (UIElement item in Children)
            {
                Size itemSize = item.DesiredSize;
                double itemWidth = itemSize.Width;

                //加入该控件后一行满了
                if (x + itemSize.Width > finalSize.Width)
                {
                    x = 0;
                    y += itemSize.Height;
                }
                //控件的坐标
                Point pt = new Point(x, y);

                //控件布局
                item.Arrange(new Rect(pt, itemSize));
                x += itemSize.Width;
            }

            return finalSize;
        }

澳门永利备用网址,