using System; using System.Collections.Generic; using System.Text; namespace Shared.Phone.UserCenter { /// /// 做成一个上下可以滑动的列表控件(它会调整高度,无桌布) /// public class VerticalListControl : VerticalScrolViewLayout { #region ■ 变量声明___________________________ /// /// 行之间的间距 /// public int rowSpace = 0; /// /// 最大高度 /// private int maxHeight = -1; #endregion #region ■ 初始化_____________________________ /// /// 做成一个上下可以滑动的列表控件(它会调整高度,无桌布) /// /// 行之间的间距(这个值是与行控件绑定一起使用的) public VerticalListControl(int i_rowSpace = 0) { rowSpace = Application.GetRealHeight(i_rowSpace); } #endregion #region ■ 添加子控件_________________________ /// /// 添加子控件(FrameRowControl,RowLayoutControl会改变高度) /// /// public override void AddChidren(View view) { base.AddChidren(view); if (view is FrameRowControl || view is RowLayoutControl) { if (rowSpace > 0) { view.Height += rowSpace; } } if (maxHeight == -1) { maxHeight = this.Height; } } #endregion #region ■ 调整真实高度_______________________ /// /// 还原高度 /// public void RecoverHeight() { if (this.maxHeight != -1) { this.Height = this.maxHeight; } } /// /// 调整控件真实高度(只针对行控件都是相同高度的,高度只会减少,不会增加) /// /// 底部空白间距(真实值) /// 当真实高度超过原有高度时,是否添加空白 public void AdjustRealHeight(int bottomSpace, bool addSpace = true) { if (this.ChildrenCount == 0) { //还原为最大高度 this.Height = maxHeight; return; } //调整列表控件的高度 var realHeight = this.ChildrenCount * this.GetChildren(0).Height + bottomSpace; if (realHeight < this.Height) { //缩小控件高度 this.Height = realHeight; } else if (addSpace == true && bottomSpace > 0 && realHeight > this.maxHeight) { var frameBack = new FrameLayout(); frameBack.Height = bottomSpace; this.AddChidren(frameBack); } } #endregion } }