计算最后一行 if

小说:公众号二维码怎么推广作者:龙秉徒公更新时间:2019-03-19字数:92563

老僧笑笑道:“如此说来,那还是有了。我诚心诚意,想要看看大唐宝物与我这偏僻地界有何异同,长老也莫要太小气了。”

网上兼职交入职费靠谱吗

在村雨的刀尖刺在地上直立在地上的同时赤瞳已经走到了刘皓面前,上上下下的打量着刘皓,那样子可谓是专注到极致,甚至刘皓都怀疑她吃东西和暗杀的时候都没有现在这般专注过。
三藏忙道:“我这出家人向来无为无能,哪有什么宝贝,就有时,路程遥远,也不能带得。”

此时,就算是林风手中握有的是一群刚刚组建起来的新军,凭着这股信念,同样可以成为一支让倭寇闻风丧胆的虎狼之师。

计算最后一行 if


自从老罗搞出大爆炸之后,各家安卓都内置了类似功能。UWP怎么能落下呢,在这里我们就一起撸一个简单的大爆炸实现。

闲话不说,先上效果:

因为代码太多,所以我打算写成一个系列,下面是第一篇的正文:

 

首先,我们构思一下BigbangView需要哪些部分:

1、一个能多选的控件;

2、一个能给Item布局的面板;

3、选中之后出现的Header和Footer。

这里我们先来实现第二项,BigbangPanel。

BigbangPanel继承自Panel,重载MeasureOverride和ArrangeOverride方法。

MeasureOverride实现调用此方法以形成递归布局更新;

ArrangeOverride为其子元素实现自定义布局的父对象应从其布局重写实现调用此方法以形成递归布局更新。

我们对面板子元素布局的思路是,遍历子元素,从左到右依次排列,若当前行子元素总宽度超过Panel宽度,则换一行从头继续排列。

(在此我们只实现一个简单版,不考虑子元素的VerticalAlignment)

protected override Size MeasureOverride(Size availableSize)
{
    foreach (var child in Children)
    {
        child.Measure(availableSize);
    }

    double width = 0d, height = 0d;
    double col_width = 0d, row_height = 0d;
    int end_row_count = -1;

    for (int i = 0; i < Children.Count; i++)
    {
        if (Children[i].DesiredSize.Width + col_width > availableSize.Width)
        {
            end_row_count = i;
            height += row_height;
            width = Math.Max(width, col_width);
            col_width = 0;
            row_height = 0;
        }
        col_width += Children[i].DesiredSize.Width;
        row_height = Math.Max(row_height, Children[i].DesiredSize.Height);
    }

    //计算最后一行
    if (end_row_count != -1)
    {
        col_width = 0;
        row_height = 0;
        for (int i = end_row_count; i < Children.Count; i++)
        {
            row_height = Math.Max(row_height, Children[i].DesiredSize.Height);
            col_width += Children[i].DesiredSize.Width;
        }
        height += row_height;
        width = Math.Max(width, col_width);
    }

    return new Size(width, height);
}

  

protected override Size ArrangeOverride(Size finalSize)
{
    double x = 0d, y = 0d;
    double items_height = 0d;
    int end_count = -1;
    int row_start_index = 0;

    for (int i = 0; i < Children.Count; i++)
    {
        if (Children[i].DesiredSize.Width + x > finalSize.Width)
        {
            x = 0;
            y += items_height;

            items_height = 0;
            end_count = i;
            row_start_index = i;
        }
        Children[i].Arrange(new Rect(x, y, Children[i].DesiredSize.Width, Children[i].DesiredSize.Height));
        x += Children[i].DesiredSize.Width;
        items_height = Math.Max(items_height, Children[i].DesiredSize.Height);
    }
    return finalSize;
}

  

现在可以测试一下,新建一个页面,添加一个ListView,修改ListView的ItemsPanel

<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <control:BigbangPanel >
            <control:BigbangPanel.ChildrenTransitions>
                <TransitionCollection>
                <AddDeleteThemeTransition />
                </TransitionCollection>
            </control:BigbangPanel.ChildrenTransitions>
        </control:BigbangPanel>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>
View Code

后台代码:

public sealed partial class BigbangPage : Page
{
    public BigbangPage()
    {
        this.InitializeComponent();
        for(int i = 0; i < 50; i++)
        {
            list.Add(rnd.Next(100000).ToString());
        }
    }

    public static Random rnd = new Random();
    ObservableCollection<string> list { get; set; } = new ObservableCollection<string>();
}

  

然后设置ListView的ItemSource="{x:Bind list}",然后我懒得新建个项目截图了,大佬们自行测试一下吧。

下集预告:实现可以选中的BigbangView

 

当前文章:http://0477auto.com/kan/yvn0ap56it.html

发布时间:2019-03-19 05:53:28

没文化的90后能干什么 陆金所忘记密码 美逛邀请别人也有钱吗 一天借到2万元 任务多 赚赚多邀请码 彩票怎么刷流水赚钱呢 电脑都有什么赚钱方法

node 实现订单30分钟后自动取消 全能赚官网 健康美丽赚美金是什么 中国银行周六上班吗0 米赚广告联盟 刷新闻赚钱的app 注册平台账号赚钱 梦幻西游单开稳定赚钱 一元购网站建设 合肥找小时工 淘宝优惠券领取app 干啥能挣钱呀 酷我音乐听歌赚钱 零钱通存10000收益多少 任务赚钱 上海兼职招聘做一休一 推广美逛赚钱 微商发展代理赚钱 烟台晚上兼职小时工

编辑:道帝

我要说两句: (0人参与)

发布