【原文地址】Silverlight Tutorial Part 5: Using the ListBox and DataBinding to Display List Data
【原文发表日期】 Friday, February 22, 2008 5:51 AM
这是8个系列教程的第5部分,这个系列示范如何使用 Silverlight 2 的 Beta1 版本来创建一个简单的 Digg 客户端应用。这些教程请依次阅读,将有助于您理解 Silverlight 的一些核心编程概念。
用 ListBox 和 DataBinding 显示我们的 Digg 故事
前面我们使用了 DataGrid 控件来显示我们的 Digg 故事。当我们想用多列的格式来显示内容时,它很适合。然而对我们的 Digg
应用程序而言,也许我们想稍微改变一下页面的显示方式,让它看起来不太像网格,而更像一个列表。好消息是,这很容易实现 -
并且我们不需要改变任何程序代码。
首先我们将 DataGrid 控件替换为 <ListBox> 控件。我们保持原有的控件名称 ("StoriesList"):
重新运行一下程序,搜索故事,ListBox 会显示搜索结果如下:
你可能觉得奇怪 - 为什么每个条目都变成了 "DiggSample.DiggStory"? 这是因为我们把 DiggStory
对象绑定给了 ListBox(而绑定的默认行为会调用这些对象的 ToString() 方法)。如果我们想改用每个 DiggStory 对象的
Title 属性来显示条目,可以设置 ListBox 的 DisplayMemberPath 属性:
这样做之后的效果如下:
如果要每次显示不止一个值,或者定制每个条目的布局,我们可以覆盖 ListBox 控件的 ItemTemplate,并提供一个自定义的 DataTemplate. 然后在这个 DataTemplate 内,定制每个 DiggStory 对象如何显示。
例如,我们可以用 DataTemplate 同时显示 DiggStory 的 Title 和 NumDiggs 值,如下所示:
在 DataTemplate 中,我们可以绑定 DiggStory 对象中我们所需的任何公共属性。注意上面我们是如何用 {Binding 属性名} 语法,配合两个 TextBlock 控件来完成这一点的。
设置了上述 DataTemplate 后,我们的 ListBox 会显示如下:
让我们再进一步,修改 DataTemplate 的定义如下。其中使用了两个 StackPanel - 一个用于水平地堆叠行,另一个用来垂直地堆叠文本块(TextBlock)。
上述 DataTemplate 会使我们的 ListBox 用如下方式显示条目:
我们在 App.xaml 文件中定义如下的 Style 规则(注意如何使用 LinearGradientBrush 来获得 DiggPanel 上的好看的渐变背景效果):
关于 ListBox 有一点值得注意 - 即使我们定制了其条目的显示方式,它仍然会提供悬浮以及选中状态的语义,不管你使用的是鼠标还是键盘(上/下方向键,Home/End,等):
ListBox 还支持完整的流式改变大小的功能 - 并在需要的时候提供内容的自动卷动功能(注意当窗口变小时,水平滚动条是如何出现的):
下一步
我们现在已经把数据的显示切换成了基于列表的方式,并清理了其内容列表。
现在让我们来完成这个程序的最后一点功能性行为 - 实现一个主/从工作流程,让用户在列表中选择某个文章时能查看其细节。详见下一篇: 《使用用户控件实现主/从场景》。
(翻译:木野狐)
分享到:
相关推荐
· 第五部分:用 ListBox 和 DataBinding 显示列表数据 (木野狐译) · 第六部分:使用用户控件实现主从表场景 · 第七部分:使用控件模板定制控件的观感 · 第八部分:使用WPF创建一个Digg桌面应用
这是简单的用ListBox显示数据库中的数据内容, Visual Studio 2008+SqlServer 2005
VB环境中的ListBox多列显示实例源码,以多列的方式显示ListBox中的数据内容,多了 解一种技巧是不多余的。
WPF ListBox中显示图片,很小的例子,就几行代码。ItemTemplate中加入一个Image控件
visual studio 2008+Sqlserver 2005 主要是在Listbox中显示数据库中的内容 简单
silverlight 将指定的文件上传至ListBox,并导出至EXCEL
天轰穿系列教程之-44列表框ListBox 天轰穿系列教程之-44列表框ListBox 天轰穿系列教程之-44列表框ListBox 天轰穿系列教程之-44列表框ListBox 天轰穿系列教程之-44列表框ListBox 天轰穿系列教程之-44列表框ListBox 天...
Listbox具有使用简单的特点,但因为没有多列显示,而不得不用Listview等别的控件,本文的方法可以很简单实现Listbox多列显示功能。里面有源码,截图,和实现说明。
ListBox动态添加数据删除数据和上移下移, 无刷新。
Silverlight ListBox 拖动 元素 位置
VB ListBox多列显示,学习好资料,简单易懂
可以给listbox的每个item加浮动显示,代码中还有listctrl加浮动显示的方法,是一个完整的工程,可以直接运行的
c# listbox显示数据库的内容c# listbox显示数据库的内容
实现ListBox控件与ListBox控件交换数据
listbox在sqlite存取信息,listbox手机样式显示
ListBox的ItemsSource属性设置包含Model类型集合M(包括很多个类型AAAA和类型BBBB),当检测到ListBox第一行的数据源是类型AAAA,则按照<DataTemplate DataType="model:AAAA">的隐式数据模板显示AAAA类型的数据。...
该工程实现了可以显示多行内容的ToolTip的ListBox,继承CWnd实现了一个自定义的ToolTip类,再继承CListBox实现了一个自定义的ListBox类
给listbox绑定webService调用的数据,对于listbox的绑定和webService异步调用的展示
控件使用 Standard页 1- Tlistbox控件 重要属性items.* 举例,界面设计如下左,执行结果如下右: 代码为 procedure TForm1.Button1Click(Sender: TObject); begin edit1.Text := listbox1.Items.CommaText; edit2....
如果你对Delphi中的ListBox控件用法不熟悉,那么本示例会是一个很不错的用法范例,在代码部分,还演示了结合数据库来读取数据交显示到ListBox中的方法。一些ListBox用法代码: if ListBox.ItemIndex>-1 then ...