WPF布局系统(常用布局面板)

来源:互联网 发布:尚学堂java视频下载 编辑:程序博客网 时间:2024/05/28 15:52
一个Panel的呈现分为测量和排列两个阶段,然后在屏幕上进行绘制。

    首先需要询问面板需要多大的空间,在这个过程中需要测量每一个子元素并得到他们所需要的空间,然后汇总这些数据,从而求出面板需要的空间。但是,往往不是测量之后就可以确定所需大小,必须在排列阶段才能获知面板所需的实际大小,因为这涉及到把子元素布局到什么位置,并尽可能地嵌入到有效空间中的问题。

    由上可知,这两个步骤都需要对子元素进行一系列的计算,所以子元素越多,执行计算的次数就越多,所以消耗的资源也就越多。故,在进行布局的时候,应该尽可能地避免使用不需要的复杂的布局面板,例如能使用Canvas就没必要使用Grid这样复杂的布局面板。同样,如果有可能,尽量避免重新的布局计算,避免不必要地调用UpdateLayout方法。

    当一个布局发生改变的时候,布局系统都会触发一次新的处理过程,进行重新布局。所以了解哪些方法会在什么情况下导致布局发生,对于优化程序性能能重要,毕竟布局过程是一个递归的过程。

       1,应注意哪些属性值更改会引起执行布局系统的递归更新;

  2,如有可能,应使用 RenderTransform 而不要使用 LayoutTransform;

  3,避免不必要地调用 UpdateLayout,因为UpdateLayout强制调用布局系统的递归更新;

  4,当包含大量元素集合时,请使用 VirtualizingStackPanel虚拟化元素;

Canvas的简要分析

    Canvas是一种比较简单的布局容器,采用绝对定位,精确地控制每个元素的位置。实际情况是Canvas不做任何布局,它只是简单地把元素放到指定的位置就OK了,而且它默认不会改变元素的大小来填充可用的布局控件,也就意味着其子元素是根据元素的内容来调整尺寸大小。

DockPanel的简要分析

    DockPanel适合于进行简单的整体布局,可以用来划分窗体的基本结构。它总是会对每个元素进行排列,默认情况下,最后一个子元素负责填充剩余的布局控件。

StackPanel的简要分析

    StackPanel也是一种简单的布局面板,它将子元素按照行或列进行排列。但是它的功能不足进行整个面板的布局,而是进行一些的模块布局。每个子元素与面板一样宽或一样高,当子元素超过面板空间,会自动截断。剩余的空间将由元素的HorizontalAlignment和VerticalAlignment属性决定。

WrapPanel的简要分析

    WrapPanel与StackPanel基本没有区别,不同的是,当子元素超过面板宽度的时候,WrapPanel会在下一行进行排列。



WPF默认提供了数种布局控件,常用的包括如下几种: 
名称用法说明Canvas此面板可承载任意元素,包括控件,图形,甚至文字。各种元素依据屏幕坐标确定位置。DockPanel此面板可指定元素的排列停靠方式,每个子元素的排列方式可以不同。Grid此面板使子元素按照纵横网格排列。StackPanel此面板使子元素按照水平或垂直方向排列,两个方向只能选其一。

VirtualizingStackPanel

与StackPanel相同,不同之处在于它可以使内容虚拟化。WrapPanel使子元素按照水平或垂直方向排列,在行或列处换行或列,依旧按照水平或垂直方向从左到右或从上到下排列。
0 0
原创粉丝点击