反反复复考虑后,准备把这一章的切入点瞄准ListBox。并用了一个看起来有点别扭的标题“认识ListBox",许多人看到这里就不爱看了,即使是大学里用winform的学生也会说ListBox我看他好几年了。但我想说,在实际项目开发中,界面元素除了Button,另一个使用率最高的就是ListBox,你认识ListBox,但未必认识下面几种特殊的ListBox,也未必知道如何最快速构建这样特殊的ListBox,这背后还涉及了blend独有的很重要的一个元素的用法,sampledatasource!有兴趣了吗?好,请看下图。

    

  在我做过的项目中很多都用到了图2和3的表达方式,比如下图中就是用了图3的布局:

    

  国内某个非常著名的公司有一款siverlight产品,也用到了上图中的布局效果。一次交流中我给他们的开发人员看了我做的一个demo,然后他问我:“你这个布局用的是什么控件啊?stackpanel? wrappanel? grid? ” ,当我跟他说是ListBox时他很意外。他告诉我他们产品中,使用grid实现这个效果, 要用code动态生成grid的行与列,把元素一个一个的加进去,由于grid不自带滚动条,所以他们还要用code控制滚动条。如此这般麻烦下才实现了上图中的效果。我听后非常无语,也非常钦佩他们的耐心。其实,实现上面的效果只要30秒。兄弟们,打开Blend,跟我一起做。

  

  打开Data面板,点击Create a sample data按钮,在弹出菜单中选择第一项,new sample data...

    

  

  在弹出菜单中直接点击OK

    

  然后blend会自动生成一个sampleDataSource,他下面紧跟一个名为Collection的集合,集合中包含两个属性Property1,Property2,点击Property1最右侧的按钮,在弹出框中将Type类型选择为Image。如下图所示:

     

  然后点击上图中的Browse...按钮,浏览一个预先准备好图片的文件夹。然后点击OK。我电脑中的位置是“e:\图片文件夹”

    

  下一步,请直接将Property1拖拽到画布上,blend会自动生成一个ListBox。并用刚才浏览的图片内容,填充ListBox。

    

  

  这样我们得到了一个默认样式的ListBox,他就像我们常见的ListBox一样,自上而下排列内容。下一步,为了让他变得特殊一点,请右击ListBox,在弹出菜单中选择Edit Additional Templates -> Edit Layout Of Items ->Create Empty

    

  在弹出对话框中,为你的Template取一个名字,然后点击OK按钮。

    

  然后你会发现,Objects and timeline面板自动切换到了Template编辑模式。如下图:

    

  在右侧属性面板中,找到StackPanel的Orientation属性,我们看到该属性默认值为vertical,也就是说自上而下排列的,请把它修改为horizontal

    

  

  在Objects and timeline面板中,点击下图中最左的“”按钮返回主界面编辑模式。

    

  这样一个水平方向,从左向右排列的ListBox便制作完毕了。

    

  下一步我们来实现图3中的另外一种效果,可以自动换行的ListBox。首先右击ListBox,在弹出菜单中选择Edit Additional Templates -> Edit Layout Of Items ->Edit Current                  

      

  将模板中的StackPanel替换为WrapPanel。(替换方法为:先删除StackPanel,然后点击工具条上的按钮,在搜索栏中输入wrappanel,稍等1分钟左右,blend才会搜索到wrappanel。如果按照上面步骤依然无法找到wrappanel,请确认电脑中是否安装了Microsoft Silverlight 4 Toolkit April 2010)

          

  在Objects and timeline面板中,点击下图中最左的“”按钮返回主界面编辑模式。

    

  

  接下来得到下图中的效果,做到这一步大家可能会有疑问,怎么ListBox一点效果也没有变化呢?

    

  别着急,这是因为wrapPanle的特性是当wrapPanle的宽度不够容下所有子Item时才会换行排列其余的Item。所以我们下一步需要禁用ListBox的水平滚动条,让他内部的wrapPanle没有延展的空间。请点击ListBox,在右侧属性面板中找到HorizontalScrollBarVislbility属性,将它设置为Disabled。

    

  这样就实现了图3中的ListBox效果。

    

  背后的故事

  也许有人会问,假设ListBox中有一万张图片数据,一起加载岂不是会消耗很多的资源? 也许你想到,如果可以随着滚动条向下拖拽,内容被逐步的加载并显示就好了。

其实微软已经替我们考虑并默认集成了这一特性。在WPF中,VirtualizingStackPanel等集合控件本身具有名为virtualizes的特性。请看下图

    

  这是一个拥有10个Item的ListBox。但他的高度只够显示4项Item,5~10(半透明的部分)用户是看不到的。我们从此可以发现,无论ListBox有多少子项,用户同一时间可以看到的只有四项,利用这一点,在WPF中,VirtualizingStackPanel无论有多少子项,实际消耗资源的只有用户看到的那四项,当滚动条向下滑动时,会动态的加载后续资源并使其可视化,同时自动释放移出用户的视野的Items。Silverlight作为WPF的弟弟,当然也默认集成了virtualizes特性。

  详细请参阅http://msdn.microsoft.com/en-us/library/bb613565.aspx  User Interface Virtualization

转载文章来源:http://www.cnblogs.com/kaodigua/archive/2011/02/21/1959650.html

[转]【全面解禁!真正的Expression Blend实战开发技巧】第六章 认识ListBox的更多相关文章

  1. 【全面解禁!真正的Expression Blend实战开发技巧】十一章 全面解析布局(Grid & Canvas &StackPanel &Wrappanel)

    原文:[全面解禁!真正的Expression Blend实战开发技巧]十一章 全面解析布局(Grid & Canvas &StackPanel &Wrappanel) 写这篇文 ...

  2. 【全面解禁!真正的Expression Blend实战开发技巧】第九章 FluidMoveBehavior完全解析之二平滑运动的滚动条

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第九章 FluidMoveBehavior完全解析之二平滑运动的滚动条 这一章讲解FluidMoveBehavior的另一个应用, ...

  3. 【全面解禁!真正的Expression Blend实战开发技巧】第二章 你好,UI设计师

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第二章 你好,UI设计师 你好,UI设计师 曾几何时我从没想过要与艺术家打交道,但是Silverlight改变了这一切.UI设计师 ...

  4. 【全面解禁!真正的Expression Blend实战开发技巧】第一章 真正的开发中的最佳的做法

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第一章 真正的开发中的最佳的做法 从设计者到开发者 设计师创建一个应用程序的布局然后让开发者去实现. 从开发者到设计者 开发者创建 ...

  5. 【全面解禁!真正的Expression Blend实战开发技巧】序章

    原文:[全面解禁!真正的Expression Blend实战开发技巧]序章 从silverlight2开始我也和大家一样一直在跟随微软的脚步,从sl2~sl4一步一步过来,总结了不少心得体会.由于各种 ...

  6. 【全面解禁!真正的Expression Blend实战开发技巧】第十章 FluidMoveBehavior完全解析之三飞出ListBox吧

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第十章 FluidMoveBehavior完全解析之三飞出ListBox吧 刚才有人说我的标题很给力,哈哈.那这个标题肯定更给力了 ...

  7. 【全面解禁!真正的Expression Blend实战开发技巧】第七章 MVVM初体验-在DataGrid行末添加按钮

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第七章 MVVM初体验-在DataGrid行末添加按钮 博客更新较慢,先向各位读者说声抱歉.这一节讲解的依然是开发中经常遇到的一种 ...

  8. 【全面解禁!真正的Expression Blend实战开发技巧】第八章 FluidMoveBehavior完全解析之一漂浮移动

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第八章 FluidMoveBehavior完全解析之一漂浮移动 好久没更新博客了,今天如果没急事,准备连发三篇,完全讲解Blend ...

  9. 【全面解禁!真正的Expression Blend实战开发技巧】第四章 从最常用ButtonStyle开始 - PathButton

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第四章 从最常用ButtonStyle开始 - PathButton 上一篇我们介绍了TextButton,但为了追求界面的张力, ...

  10. 【全面解禁!真正的Expression Blend实战开发技巧】第五章 从最常用ButtonStyle开始 - ImageButton

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第五章 从最常用ButtonStyle开始 - ImageButton 本章围绕ImageButton深入讨论,为什么是Image ...

随机推荐

  1. mysql 数据库 内容的增删改查

    /*所有字段插入值*//*注意插入值数目要与字段值一致*/INSERT INTO student VALUES(1,'熊大','123','2019-10-18',1200);INSERT INTO ...

  2. SpringMVC的孪生兄弟WebFlux

    一.入门文字介绍 官方口水话简短翻译: Spring WebFlux是一个非阻塞的Web框架,用于利用多核,短时间可一处理大量并发连接. 非阻塞式 在servlet3.1提供了非阻塞的API,WebF ...

  3. 2019云栖大会开幕,5G边缘计算成首日焦点

    9月25日,全球顶尖科技盛会——2019云栖大会如期上演,1000余位当代技术领军人物与数万名开发者集结杭州,聚焦数字经济,共话面向未来20年的基础科学.科技创新与应用突破.其中,边缘计算技术领域因5 ...

  4. System.Math.cs

    ylbtech-System.Math.cs 1. 程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c56193 ...

  5. iOS开发之SceneKit框架--SCNCamera.h

    1.SCNCamera简介 被称为照相机或者摄像机,可以附加到节点以提供显示场景的角度.其实就是用户视角和人的眼睛一样. 2.相关API简介 初始化 //懒加载 + (instancetype)cam ...

  6. android studio 正式版本

    注意:以下 Android Studio 下载链接全是 dl.google.com 开头的官方下载,无需tizi,建议用浏览器直接从官方原始链接下载,不要用迅雷下载.不要用迅雷下载.不要用迅雷下载,重 ...

  7. Censored! POJ - 1625 AC自动机+大数DP

    题意: 给出一n种字符的字典,有p个禁用的单词, 问能组成多少个不同的长度为m的合法字符串.(m<=50) 题解: 是不是个我们之前做的题目非常非常像,题意都一样. 直接将上次写的AC自动机+矩 ...

  8. nvelocity的Foreach 中使用DataTable数据

    原文:nvelocity的Foreach 中使用DataTable数据 tripDetailList是一个DataTable类型的数据,Logo.TripTypeName.TipTypePrice等为 ...

  9. NoSQL SimpleDB

  10. JS数组 二维数组 二维数组的表示 方法一: myarray[ ][ ];方法二:var Myarr = [[0 , 1 , 2 ],[1 , 2 , 3, ]]

    二维数组 一维数组,我们看成一组盒子,每个盒子只能放一个内容. 一维数组的表示: myarray[ ] 二维数组,我们看成一组盒子,不过每个盒子里还可以放多个盒子. 二维数组的表示: myarray[ ...