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获取相应的模板,很简单。
看下效果,条纹斑马:
白肚皮黑身体的企鹅:
一圈一圈尾巴的环尾狐猴:
以及代码:这里
在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获取相应的模板,很简单。
看下效果,条纹斑马:
白肚皮黑身体的企鹅:
一圈一圈尾巴的环尾狐猴:
以及代码:这里
相关文章推荐
- Silverlight-TabControl扩展
- C# WinForm控件美化扩展系列之TabControl控件(3)-完整版
- Silverlight中的TabControl如何绑定数据?
- silverlight TabControl 动态添加和删除
- Silverlight TabControl样式
- 修改TabControl的样式(SilverLight)
- silverlight TabControl、ListBox 使用之tips
- 有关Silverlight TabControl组件的研究——Silverlight学习笔记(5)
- Silverlight (TabControl)同一页面多选项切换展示
- 稳扎稳打Silverlight(6) - 2.0控件之ScrollViewer, Slider, StackPanel, TabControl, TextBlock, TextBox, ToggleButton
- Silverlight常用控件最佳实践之1.自定义TabControl禁用状态
- Silverlight中的TabControl如何绑定数据?
- 稳扎稳打Silverlight(6) - 2.0控件之ScrollViewer, Slider, StackPanel, TabControl, TextBlock
- Silverlight 3下自动绑定TabControl的方案
- Silverlight中的TabControl如何绑定数据?重写tabcontrol和tabItem 解决绑定友好问题。可以绑定对象集合
- C# WinForm控件美化扩展系列之TabControl控件(1)
- 有关Silverlight TabControl组件的研究
- 稳扎稳打Silverlight(6) - 2.0控件之ScrollViewer, Slider, StackPanel, TabControl, TextBlock, TextBox, ToggleButton
- Silverlight TabControl的SelectionChanged简单例子
- Silverlight TabControl和Accordion控件使用介绍