zoukankan      html  css  js  c++  java
  • WPF/Sliverlight ScrollViewer与Panel(1)

           如果你从事WPF或者Silverlight开发的话,应该都使用过ListBox控件,或许还听说过VirtualizingStackPanel,VirtualizingStackPanel一方面提升了性能,同时也增加了编程的复杂度.如果你在开发UI界面,那么必然会遇到这个问题.
    首先我们从简单开始

    列表控件现状

    这里我们只讨论列表的元素
    现在有一个窗体高度是400,每个元素的高度为20,那么最大可以展示20个元素,我们先以StackPanel来做演示

    void AddElementToPanel(Panel panel)
    {
        for (int i = 0; i < 20; i++)
        {
            panel.Children.Add(new TextBlock() { Text = i.ToString() });
        }
    }

    如下图

    imageimage

    左侧是示例图,右侧则是这个Panel的实际(VisualTree)视觉树的数量

    下面我们会慢慢做出一些变化

    保持窗体高度不变,增加元素数量

    现在我们将StackPanel内部的元素数量增加到30个,

    如下图,窗体显示了20个元素,但实际上StackPanel的VisualTree数量却是30个

    image

    问题:实际上由于我们窗体高度不够高才显示了20个.有两种办法可以看到全部元素

    1. 增加窗体高度
    2. 使用ScrollBar进行拖拉

    我们先来看第一种解决方法,如下图,这是最简单的办法
    image

    当添加更多元素时

    现在我们要将元素添加到100个,那么窗体的最大高度也无法显示全部元素,那么必须使用ScrollBar来解决了.
    两个ScrollBar的ScrollViewer控件,由于列表可以有高度和宽度,所以有可能高度和宽度溢出,WPF内置提供了ScrollViewer控件,只需要把Panel放在其内部就可以了

    如下XAML

            <ScrollViewer>
                <StackPanel></StackPanel>
            </ScrollViewer>
    

    现在显示效果如下

    image

    现在UI实际界面只展示Panel部分元素,而实际上Panel则有100个元素

    我们来一下三个StackPanel的总体效果

    image


    这里我们看到由于列表元素的变化,整个窗体的布局必须也要跟着做出一些变化,
    比如增加窗体高度,使用ScrollViewer等一些方法.
    比较神奇的是把StackPanel放在ScrollViewer里面就可以了,这似乎看起来很简单,但如果元素更多呢?1000个,10000个呢?

    Demo下载

  • 相关阅读:
    5.9上午
    5.4下午
    5.4上午
    5.2上午
    4.19下午
    4.18上午
    4.17下午
    4.17上午
    4.12下午
    4.13下午
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1855439.html
Copyright © 2011-2022 走看看