Silverlight ItemsControl详细解析+解惑

Silverlight ItemsControl详细解析+解惑,第1张

概述Silverlight最强大的地方就在于定义控件了,Silverlight提供了非常灵活和高效的控件定义方式,几乎可以实现任何复杂的控件实现,对于快速开发应用程序有着重要的意义。在Silverlight中一般将控件分为两大类: 非ItemsControl,像TextBox、Button等,表示单一的一个控件,这样的控件大部分开发者都可以很好的理解和掌握 ItemsControl,像ListBox、

Silverlight最强大的地方就在于定义控件了,Silverlight提供了非常灵活和高效的控件定义方式,几乎可以实现任何复杂的控件实现,对于快速开发应用程序有着重要的意义。在Silverlight中一般将控件分为两大类:

非ItemsControl,像TextBox、button等,表示单一的一个控件,这样的控件大部分开发者都可以很好的理解和掌握 ItemsControl,像ListBox、ComboBox、TreeVIEw等,用来承载多个控件,这样的控件给很多开发者带来困惑,不是很好理解,尤其是在定义ItemsControl控件时。希望通过本文能够让所有还对ItemsControl有困惑的开发者,能够更清晰的认识ItemsControl 那些困惑 现在有如下的需求:我想添加如下的一个集合控件,期望选中项出现三角箭头的提示,应该是在DataTemplate中定义,还是在ListBoxItem中Template定义?

下面的代码是如何实现多级数据绑定的,明明只使用了一级的DataTemplate?
<sdk:HIErarchicalDataTemplate x:Key="DataTemplate1" ItemsSource="{Binding SubFolders}">    <GrID>        <TextBlock textwrapPing="Wrap" Text="{Binding Foldername}"/>    </GrID></sdk:HIErarchicalDataTemplate>
ItemsControl剖析

这里着重介绍其中几个关键方法,透彻理解这些方法是使用和定义ItemsControl的关键:

IsItemItsOwnContainerOverrIDe,ItemsControl会遍历Items集合,对每个item调用该方法(注:对于设置ItemsSource的话,最终都会将ItemsSource中的每一项都添加到Items集合中),如果item类型和ItemsControl的每个Item的Container类型不匹配,返回false,否则返回true,如果要实现自定义的集合控件,这里就是该集合控件需要的ItemContainer类型。下图是ListBox中该方法的实现:
 

GetContainerForItemOverrIDe,如果IsItemItsOwnContainerOverrIDe返回false,就执行该方法,这个方法主要是为ItemsControl的每个Item返回一个ItemContainer对象 PrepareContainerForItemOverrIDe,这个方法在准备显示每个Item之前做的一系列的准备工作,最主要的 *** 作包括: 就是设置每个ItemContainer的ContentTemplate,这里也说明ItemContainer一般都为ContentControl,否则ItemsControl的ItemTemplate设置就没有任何意义 如果ItemsControl设置了displayMemberPath的话,ItemsControl就生成一个displayMemberTemplate的内部类,这个类本质上是一个DataTemplate,从DataTemplate继承,其使用TextBlock绑定displayMemberPath指定的属性路径 使用ItemsControl的ItemContainerStyle设置了ItemContainer的Style

关于这个方法需要说明的几点是:

ItemTemplate和displayMemberPath不能同时设置,否则会抛出异常 如果自定义的ItemsControl在显示Item时出现问题的话,就检查是否正确的重写了该方法,比如是否覆盖了base的实现,而且还没有正确设置ItemTemplate、ItemContainer这些属性 ClearContainerForItemOverrIDe,这个方法在ItemsControl中Item被从界面显式中移除时执行,用来清理ItemContainer使用的资源,可以在这里解注册ItemContainer注册的事件等 *** 作

未完待续…………………

总结

以上是内存溢出为你收集整理的Silverlight ItemsControl详细解析+解惑全部内容,希望文章能够帮你解决Silverlight ItemsControl详细解析+解惑所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1016163.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存