尽管在Silverlight Toolkit中有相关的DEMO来演示如何使用TreeView控件,但其还是有一些功能没被演示出来。因为在我们平时开发过程中,数据是被动态查询获取的(不是DEMO中的静态文件方式)。因此今天就演示一下如何使用WCF来获取相应数据并使用TreeView来动态加载相应结点信息。
首先,我们要创建一个WCF服务来获取相应的树形节点数据信息,如下:
从代码中可看出,ForumInfo是使用ParendID来记录父结点信息并以此来创建一个树形结构的,而方法:
GetForumData()即是演示了我们平时查询数据的过程。我们在Silverlight中添加对该服务的引用即可。
我们在Silverlight中添加对Silverlight Toolkit相关DLL引用,然后向XAML文件上拖入一个TREEVIEW控件。并将其命名为“TreeOfLife”,最后我们再放几个TextBlock来显示树形结点被点击后显示的相应的
ForumInfo信息。最后XAML中的内容如下所示:
下面是相应的XAML.CS文件中的内容,主要是使用递归方式遍历数据列表并创建相关的结点信息:
下面演示一下效果,如下图所示:
当前TreeView控件还支持样式定义,比如可以给每个树形结点前添加CheckBox和一个小图标,这里我们使用下
面样式:
然后在cs文件中使用下面语句将该样式绑定到TreeView上:
下面就是应用了该样式的运行效果:
运行该样式的效果如下图所示:
好了,今天的内容就先到这里了。
DEMO下载,请 点击这里:)
原文链接: [url]http://daizhj.blog.51cto.com/285189/128209[/url] 作者: daizhj,代震军 Tags: silverlight,treeview,树形,控件 网址: [url]http://daizhj.blog.51cto.com/ [/url]
首先,我们要创建一个WCF服务来获取相应的树形节点数据信息,如下:
public
class
ForumInfo
{
int ForumID { get ; set ; }
ParendID { string ForumName { ; }
}
[ServiceContract(Namespace = "" )]
[AspNetCompatibilityRequirements(RequirementsMode AspNetCompatibilityRequirementsMode.Allowed)]
DateService
{
[OperationContract]
List < ForumInfo > GetForumData()
{
List forumList new ();
forumList.Add( ForumInfo() { ForumID 1 , ParendID 0 " 笔记本版块 " });
forumList.Add( 2 台式机版块 });
forumList.Add( 3 Dell笔记本 });
forumList.Add( 4 IBM笔记本 5 IBM-T系列 6 IBM-R系列 7 联想台式机 8 方正台式机 9 HP台式机 10 联想家悦H系列 11 联想IdeaCentre系列 });
return forumList;
}
}
{
int ForumID { get ; set ; }
ParendID { string ForumName { ; }
}
[ServiceContract(Namespace = "" )]
[AspNetCompatibilityRequirements(RequirementsMode AspNetCompatibilityRequirementsMode.Allowed)]
DateService
{
[OperationContract]
List < ForumInfo > GetForumData()
{
List forumList new ();
forumList.Add( ForumInfo() { ForumID 1 , ParendID 0 " 笔记本版块 " });
forumList.Add( 2 台式机版块 });
forumList.Add( 3 Dell笔记本 });
forumList.Add( 4 IBM笔记本 5 IBM-T系列 6 IBM-R系列 7 联想台式机 8 方正台式机 9 HP台式机 10 联想家悦H系列 11 联想IdeaCentre系列 });
return forumList;
}
}
从代码中可看出,ForumInfo是使用ParendID来记录父结点信息并以此来创建一个树形结构的,而方法:
GetForumData()即是演示了我们平时查询数据的过程。我们在Silverlight中添加对该服务的引用即可。
我们在Silverlight中添加对Silverlight Toolkit相关DLL引用,然后向XAML文件上拖入一个TREEVIEW控件。并将其命名为“TreeOfLife”,最后我们再放几个TextBlock来显示树形结点被点击后显示的相应的
ForumInfo信息。最后XAML中的内容如下所示:
<
controls:TreeView
x:Name
="TreeOfLife"
Margin
="5"
Grid.Column
="0"
Grid.Row
="1"
selecteditemchanged ="TreeOfLife_selecteditemchanged" />
Border BorderBrush ="Gray" BorderThickness Padding ="8" ="8,0" ="1" >
StackPanel ="DetailsPanel" ="4"
Orientation ="Horizontal"
TextBlock Text ="版块ID: " FontWeight ="Bold" =" {Binding ForumID} " </ StackPanel ="版块名称: " {Binding ForumName} ="版块信息: " ="DetailText" textwrapping ="Wrap" Text "
Border >
selecteditemchanged ="TreeOfLife_selecteditemchanged" />
Border BorderBrush ="Gray" BorderThickness Padding ="8" ="8,0" ="1" >
StackPanel ="DetailsPanel" ="4"
Orientation ="Horizontal"
TextBlock Text ="版块ID: " FontWeight ="Bold" =" {Binding ForumID} " </ StackPanel ="版块名称: " {Binding ForumName} ="版块信息: " ="DetailText" textwrapping ="Wrap" Text "
Border >
下面是相应的XAML.CS文件中的内容,主要是使用递归方式遍历数据列表并创建相关的结点信息:
partial
Page : UserControl
{
DateServiceClient dataServiceClient DateServiceClient();
ObservableCollection ObservableCollection ();
Page()
{
InitializeComponent();
// 此样式只添加在根结点上
TreeOfLife.ItemContainerStyle = this.Resources["RedItemStyle"] as Style;
dataServiceClient.GetForumDataCompleted += EventHandler GetForumDataCompletedEventArgs (dataServiceClient_GetForumDataCompleted);
dataServiceClient.GetForumDataAsync();
}
void dataServiceClient_GetForumDataCompleted( object sender, GetForumDataCompletedEventArgs e)
{
try
{
forumList e.Result;
AddTreeNode( null );
}
catch
{
throw NotImplementedException();
}
}
private AddTreeNode( parentID, TreeViewItem treeViewItem)
{
List result (from forumInfo in forumList
where forumInfo.ParendID == parentID
select forumInfo).ToList ();
if (result.Count )
{
foreach (ForumInfo foruminfo result)
{
TreeViewItem objTreeNode TreeViewItem();
objTreeNode.Header foruminfo.ForumName;
objTreeNode.DataContext foruminfo;
此样式将会添加的所有叶子结点上
objTreeNode.ItemContainerStyle = this.Resources["RedItemStyle"] as Style;
添加根节点 (treeViewItem )
{
TreeOfLife.Items.Add(objTreeNode);
}
else
{
treeViewItem.Items.Add(objTreeNode);
}
AddTreeNode(foruminfo.ForumID, objTreeNode);
}
}
}
TreeOfLife_selecteditemchanged( e)
{
TreeViewItem item e.NewValue as TreeViewItem;
ForumInfo fi item.DataContext ForumInfo;
DetailsPanel.DataContext fi;
}
}
{
DateServiceClient dataServiceClient DateServiceClient();
ObservableCollection ObservableCollection ();
Page()
{
InitializeComponent();
// 此样式只添加在根结点上
TreeOfLife.ItemContainerStyle = this.Resources["RedItemStyle"] as Style;
dataServiceClient.GetForumDataCompleted += EventHandler GetForumDataCompletedEventArgs (dataServiceClient_GetForumDataCompleted);
dataServiceClient.GetForumDataAsync();
}
void dataServiceClient_GetForumDataCompleted( object sender, GetForumDataCompletedEventArgs e)
{
try
{
forumList e.Result;
AddTreeNode( null );
}
catch
{
throw NotImplementedException();
}
}
private AddTreeNode( parentID, TreeViewItem treeViewItem)
{
List result (from forumInfo in forumList
where forumInfo.ParendID == parentID
select forumInfo).ToList ();
if (result.Count )
{
foreach (ForumInfo foruminfo result)
{
TreeViewItem objTreeNode TreeViewItem();
objTreeNode.Header foruminfo.ForumName;
objTreeNode.DataContext foruminfo;
此样式将会添加的所有叶子结点上
objTreeNode.ItemContainerStyle = this.Resources["RedItemStyle"] as Style;
添加根节点 (treeViewItem )
{
TreeOfLife.Items.Add(objTreeNode);
}
else
{
treeViewItem.Items.Add(objTreeNode);
}
AddTreeNode(foruminfo.ForumID, objTreeNode);
}
}
}
TreeOfLife_selecteditemchanged( e)
{
TreeViewItem item e.NewValue as TreeViewItem;
ForumInfo fi item.DataContext ForumInfo;
DetailsPanel.DataContext fi;
}
}
下面演示一下效果,如下图所示:
@H_404_491@
当前TreeView控件还支持样式定义,比如可以给每个树形结点前添加CheckBox和一个小图标,这里我们使用下
面样式:
UserControl.Resources
Style
x:Key
="RedItemStyle"
targettype
="controls:TreeViewItem"
Setter
Property
="HeaderTemplate"
Setter.Value
DataTemplate
CheckBox Image Source ="image/default.png" {Binding} Foreground ="Red" FontStyle ="Italic" Setter ="IsExpanded" Value ="True" Style >
Setter.Value
DataTemplate
CheckBox Image Source ="image/default.png" {Binding} Foreground ="Red" FontStyle ="Italic" Setter ="IsExpanded" Value ="True" Style >
然后在cs文件中使用下面语句将该样式绑定到TreeView上:
TreeOfLife.ItemContainerStyle
this
.Resources[
RedItemStyle
]
Style;
下面就是应用了该样式的运行效果:
当前TreeView中定义样式模版还可以使用ItemTemplate,下面是一段样式代码:
controls:TreeView.ItemTemplate
controls:HierarchicalDataTemplate
ItemsSource
{Binding Subclasses}
ItemContainerStyle {StaticResource ExpandedItemStyle} {Binding Rank} FontSize ="0 0 0 -5" {Binding Classification} controls:HierarchicalDataTemplate >
ItemContainerStyle {StaticResource ExpandedItemStyle} {Binding Rank} FontSize ="0 0 0 -5" {Binding Classification} controls:HierarchicalDataTemplate >
运行该样式的效果如下图所示:
好了,今天的内容就先到这里了。
DEMO下载,请 点击这里:)
原文链接: [url]http://daizhj.blog.51cto.com/285189/128209[/url] 作者: daizhj,代震军 Tags: silverlight,treeview,树形,控件 网址: [url]http://daizhj.blog.51cto.com/ [/url]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。