
点击展开示例代码
public class Message 
...{
public string Title ...{ get; set; }
public string OpenedBy ...{ get; set; }
public string OpenTime ...{ get; set; }
public string Content ...{ get; set; }
}运行起来是这样:

点击展开示例代码
private void LoadButton_Click(object sender, RoutedEventArgs e) 
...{
// 造些假数据。项目中数据来自数据库
List<Message> msgList = new List<Message>();
for (int i = 0; i < 30; i++) 
...{
Message msg = new Message() 
...{
Title = "Message Title " + i.ToString(),
OpenedBy = (i % 2 == 0) ? "Tom" : "Tim",
OpenTime = DateTime.Now.ToShortDateString(),
Content = (i % 2 == 0) ? "水之真谛" : @"http://blog.csdn.net/FantasiaX"
}
点击Load后,效果是这样的:
msgList.Add(msg);
}
this.listBox.ItemsSource = msgList;
}
点击展开示例代码
点击展开示例代码
// 切换视图
private void Button_Click(object sender, RoutedEventArgs e) 
...{
// Silverlight里的VisualTreeHelper功能受限,所以只能这样做。WPF里的就方便多了。
Button b = sender as Button;
StackPanel p = VisualTreeHelper.GetParent(b) as StackPanel;
p = VisualTreeHelper.GetParent(p) as StackPanel;
p = p.FindName("detailPanel") as StackPanel;
if (p.Visibility == Visibility.Collapsed) 
...{
p.Visibility = Visibility.Visible;
}
else 
...{
p.Visibility = Visibility.Collapsed;
}
}只是Silverlight为了“减肥”,把很多VisualTreeHelper的功能都给砍了,这样我们就只能手动地去找到需要显示/隐藏的UI元素了。
你可能会问:那么多记录,每条上都有一个Switch按钮,是不是需要写一个循环,把它们的Click事件与Button_Click函数关联起来呀?
答案是:No!当你把一列数据赋值给ListBox.ItemsSource时,ListBox会按照自己的ItemTemplate(即我们设计的DataTemplate)逐个处理自己的Item。
到此,功能就已经实现了。如果觉得UI不是很漂亮,那就交给我们的designer,他们会给整个程序穿上漂亮的外衣。
下面的图是进行美化后的结果,请大家欣赏!