您的位置:首页 > 其它

Silverlight-TabControl扩展(2)

2011-07-04 23:42 253 查看
上一篇简单扩展了TabControl的ItemsSource属性。只是只能应用一个统一的模板展示数据,但是毕竟ItemsSource是IEnumerable类型的,这就意味着里面的每个Item都可以有自己不同的Type,而相同的DataTemolate可能并不适用。

在WPF和SL5中可以给DataTemplate标记DataType,这样ItemsControl会去自己识别相应的类型所需的模板。在SL4中也让我们来简单实践下。

在TabControlExtensions类里增加一个DataTemplate的附加属性,实验证明Type类型并不能很好的被编译器识别,还是用string了。

View Code

private static void OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var source = d as TabControl;
var items = e.NewValue as IEnumerable;

source.Items.Clear();

if (items != null)
{
var headerTemplate = GetHeaderTemplate(source);
var contentTemplate = GetContentTempalte(source);

foreach (var item in items)
{
//-------
var typeName = item.GetType().Name;
var itemTemplate = _templateStore.ContainsKey(typeName) ? _templateStore[typeName] : null;
//-------

var tabItem = new TabItem
{
DataContext = item,
Header = item,
HeaderTemplate = headerTemplate,
Content = item,
//---------
ContentTemplate = itemTemplate ?? contentTemplate,
//---------
};
source.Items.Add(tabItem);
}
}
}

增加的部分代码用注释标记了,从存储了键值的字典里根据Type的Name获取相应的模板,很简单。

看下效果,条纹斑马:



白肚皮黑身体的企鹅:



一圈一圈尾巴的环尾狐猴:



以及代码:这里
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: