全面的seo网站优化排名,湖北建设厅官方网站,互联网域名注册,定制网站建设公司推荐WPF之路——WPF布局系统 前言 前段时间忙了一阵子Google Earth#xff0c;这周又忙了一阵子架构师论文开题报告#xff0c;现在终于有时间继续WPF之路了。先回忆一下上篇的内容#xff0c;在《从HelloWorld到WPF World》中#xff0c;我们对WPF有了个大概的了解这周又忙了一阵子架构师论文开题报告现在终于有时间继续WPF之路了。先回忆一下上篇的内容在《从HelloWorld到WPF World》中我们对WPF有了个大概的了解并了解了初学WPF时应该从哪些知识点入手。今天我们就从最基本的知识点之一布局系统来继续学习WPF主要包括如下内容。 0什么是布局 1基本元素——面板 2常用容器控件 3测量与排列 4基本属性Alignment,Margin和Pading 5附加属性 6布局与性能 7总结 0什么是布局 这是一个很简单的问题。简单来说就是把一些控件有条理的摆放在界面上合适的位置显然摆的乱七八糟不能算布局。在WPF中这个条理与WinForm中略有不同让我们看个很简单的界面 这样子的界面大家在熟悉不过了。依图所示WPF先用蓝线假设的线将界面划分为上下两部分然后再有红线划分出多个方格最后放入控件其中每部分中的控件或划分的空格只能纵向排列或横向排列不能有其他选择。大多数情况下WPF程序界面上的控件都要按照此种递归的方法逐个排列最终形成所看到的界面。 1基本元素——面板 在上节中我们了解了WPF布局原理这可以简单理解为大控件中按排或列放入小控件小控件在按照同样规则放入更小控件。这种能放入其他控件的控件是WPF布局系统中的基本元素——面板。面板是用来放东西的既包括控件元素也包括面板自己。面板不仅能承载其他子元素(控件)还能控制子元素的大小位置以及如何排列。例如上述例子中蓝线划分的面板控制子元素只能上下排列而红线划分的面板控制的子元素只能横向排列。 WPF默认提供了几种面板都是从基面板(Panel)继承而来看一下它们的继承链。 System.Windows.Threading.DispatcherObject System.Windows.DependencyObject System.Windows.Media.Visual System.Windows.UIElement System.Windows.FrameworkElement System.Windows.Controls.Control System.Windows.Controls.Panel System.Windows.Controls.Canvas System.Windows.Controls.DockPanel System.Windows.Controls.Grid System.Windows.Controls.StackPanel System.Windows.Controls.VirtualizingPanel System.Windows.Controls.WrapPanel 2常用容器控件 WPF默认提供了数种布局控件常用的包括如下几种 名称用法说明Canvas此面板可承载任意元素包括控件图形甚至文字。各种元素依据屏幕坐标确定位置。DockPanel此面板可指定元素的排列停靠方式每个子元素的排列方式可以不同。Grid此面板使子元素按照纵横网格排列。StackPanel此面板使子元素按照水平或垂直方向排列两个方向只能选其一。 VirtualizingStackPanel 与StackPanel相同不同之处在于它可以使内容虚拟化。WrapPanel使子元素按照水平或垂直方向排列在行或列处换行或列依旧按照水平或垂直方向从左到右或从上到下排列。 3测量与排列 当我们在面板上放入子元素并设置相应的属性时WPF的布局系统自动为我们完成2个过程测量和排列这是两个非常重要的过程。 由于WPF界面元素有很多与布局有关的属性如坐标大小对齐方式相对位置间距等。首先这些属性使用的是与设备无关的分辨率单元这导致同样大小的元素在不同界面上显示的效果可能不同其次每个属性值有一定的优先级例如Button的Height和Width属性优先于Stretch属性如果设置 Height, Width 以及 Stretch会导致 Stretch被忽略。 因此尽管在设计时指定了属性值布局系统依然需要重新计算每个子元素在界面上的实际大小位置边距等值这些值被称为“FinalSize”。 4基本属性Alignment,Margin和Pading 在设计UI时WPF为我们提供了一些属性用于精确定位元素其中最常用的有三个Alignment(包括水平垂直)MarginPading具体用法如下 名称说明Alignment子元素在水平(垂直)方向的对齐方式有左对齐右对齐顶端对齐底部对齐中间对齐拉伸填充等四种方式。Margin用于指定元素与其子级或同级之间的距离包括上下左右四个值。也可通过使用 Margin20 同时指定四个值。Pading Padding 在大多数方面类似于 Margin只有少数元素有公开用于将子元素的有效大小增大指定的厚度。 5附加属性 通过上面我们了解到子元素通过一些属性值的设置实现在面板上布局比如Alignment对齐属性Dock停靠排列属性。这些属性不属于子元素本身而依赖与所在的父元素。比如同样是Button在DockPanel中有Dock属性而在Grid中就没有。这些属性的存在依赖与父元素在WPF中称做“附加属性”。 附加属性的用途是允许不同的子元素为实际在父元素中定义的属性指定唯一值目的是让子元素通知父元素它将如何在界面中呈现。如上面提到的DockPanel.Dock 属性因为它将在 DockPanel 中包含的元素上设置而不是在 DockPanel 本身设置。注意相对于子元素父元素提供的附加属性相当于全局属性。 6布局与性能 通过上面我们了解到当给界面元素的布局属性赋值时布局系统需要重新计算和排列所有子元素的“FinalSize”(因为改变影响不可知)。这是一个递归的过程。如果不注意可能会带来性能问题。因此在设计时应注意下面几点 1应注意哪些属性值更改会引起执行布局系统的递归更新 2如有可能应使用 RenderTransform 而不要使用 LayoutTransform 3避免不必要地调用 UpdateLayout因为UpdateLayout强制调用布局系统的递归更新 4当包含大量元素集合时请使用 VirtualizingStackPanel虚拟化元素 7总结 通过本文我们大概了解了WPF的布局系统常用的布局面板与布局有关的几个属性以及设计开发UI时的注意事项。这些内容很多与WinForm中的相关概念相通可以说是旧瓶装新酒稍加思考并不难理解如果深入了解会发现与WinForm截然不同。但作为初学者如果能灵活使用文中所讲的知识点深入理解注意点对自身的提高还是很有帮助的