Silverlight已升级到4了,要抓紧时间学习了。这段时间把自己学习各控件的代码整理下,放到博客上给自己留个记录。也对和我一样的初学者起到共同交流的地方。
特别说明:代码中是在学习别人的代码基础上写出的,如果您是高手就不要看了,免得担误您的时间。
Treeview学习
1、Treeview的基本使用
这个比较简单,我直接拿了Microsoft Silverlight 3 Toolkit的代码自己重写了下(看懂别人的代码和自己复写代码还是有区别的,呵呵,建议和我一样的初学者也写写,有时可能一个引用没写就会和别人的代码差出十万八千里。)
首先在SilverLight工程中引用System.Windows.Controls.Toolkit
页面中声明
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"下面的代码中直接拷贝到新建立的页面中使用就可以了
<StackPanel x:Name="CP"> <controls:TreeView Margin="5"> <controls:TreeViewItem Header="格式数据测试" > <controls:TreeViewItem Header="格式数据1" Foreground="Blue"/> <controls:TreeViewItem Header="格式数据2" Foreground="Red"/> <controls:TreeViewItem Header="格式数据3" Foreground="Pink"/> <controls:TreeViewItem Header="格式数据4" IsEnabled="False"/> </controls:TreeViewItem> </controls:TreeView> <controls:TreeView> <controls:TreeViewItem Header="字符串数据"> <system:String>字符串数据1</system:String> <system:String>字符串数据2</system:String> <system:String>字符串数据3</system:String> </controls:TreeViewItem> </controls:TreeView> <controls:TreeView> <controls:TreeViewItem Header="数据源绑定"> <controls:TreeViewItem.ItemsSource> <toolkit:ObjectCollection> <system:String>字符串数据1</system:String> <system:String>字符串数据2</system:String> <system:String>字符串数据3</system:String> </toolkit:ObjectCollection> </controls:TreeViewItem.ItemsSource> </controls:TreeViewItem> </controls:TreeView> <controls:TreeView Margin="5"> <controls:TreeViewItem Header="树下使用用其它控件" > <controls:TreeViewItem Header="TT"> <Button Content="按钮"/> <CheckBox Content="单选"/> <RadioButton Content="多选"/> </controls:TreeViewItem> </controls:TreeViewItem> </controls:TreeView> </StackPanel>
2、动态实现一个只有子节点有checkbox的树(有些项目会需要)
还是在上面实现的页面的基础上,在代码层我做了个基本测试,首先写个方法LoadTree。通过上面的代码我们可以看到一些东西
如果要实现一个树,外层必须是TreeView ,在其内层可实现TreeViewItem 的嵌套,同时不限于只嵌套TreeViewItem ,可以是其它控件或是字符串等,这为我想实现的只有子节点的树提供了可能(实现说明,可能有高手有更好的实现方法,我只是记录自己的想法)
下面是实现方法,代码很简单,如果真要做的话还可以实现一个递归来处理这些繁琐的事情
private void LoadTree()
{
//创建根目录
TreeView tv = new TreeView();
//创建二级节点
TreeViewItem tvItem = new TreeViewItem();
tvItem.Header = "动态测试1";
//创建三级节点
TreeViewItem tvItem1 = new TreeViewItem();
tvItem1.Header = "动态测试2";
//创建叶子节点所需要的CheckBox
CheckBox ck1 = new CheckBox() { Content = "测试" };
//逐一加入上层控件
tvItem1.Items.Add(ck1);
tvItem.Items.Add(tvItem1);
tv.Items.Add(tvItem);
//最后将这棵树放入容器
CP.Children.Add(tv);
}
最后在页面初始化时调用就可以了(这里需要注意的是,这是一个DEMO,如果真正在项目时尽量不要在程序初始化时加入太多东西,
因为必竟这是以网络形式的开发,我还是喜欢C/S的开发方式,虽然现在大家都在搞网页,呵呵)