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

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


未处理前效果: 

 

处理后效果: 

      
 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  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();}