WPF中的数据模板使用方式之一:ContentControl、ContentTemplate和TemplateSelector的使用
来源:互联网 发布:巴黎世家机车包 知乎 编辑:程序博客网 时间:2024/06/15 19:36
在WPF中,数据模板是非常强大的工具,他是一块定义如何显示绑定的对象的XAML标记。有两种类型的控件支持数据模板:(1)内容控件通过ContentTemplate属性支持数据模板;(2)列表控件通过ItemTemplate属性支持数据模板。为了能够进一步提升数据模板的功能,在使用中常常会要求动态选择数据模板。对于列表控件,可以通过设置DataType来解决,复杂时需要使用模板选择器。以下主要谈论以下内容控件中的模板选择。
在WPF中,有时内容控件(如ContentControl,Button等)会根据数据对象的类型而需要动态变换,可以使用数据模板配合模板选择器来解决。模板选择器需要从System.Windows.Controls.DataTemplateSelector继承,重写其SelectTemplate方法,在该方法中根据item的类型或item属性来选择合适的数据模板。为了能够选择模板,需要将模板定义为属性,如public DataTemplate BoxGirderTemplate { get; set; }等等。
public class MyContentTemplateSelector:DataTemplateSelector
{
public DataTemplate BoxTemplate { get; set; }
public DataTemplate SlabTemplate { get; set; }
public DataTemplate TGirderTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
ISec s = (ISec)item;
if (s!=null&&s.Name == "Box")
return BoxGirderTemplate;
else if (s != null && s.Name == "Slab")
return SlabTemplate;
else if (s != null && s.Name == "TGirder")
return TGirderTemplate;
return null;
}
}
在xaml中,在内容控件中实例化模板选择器。在实例化模板选择器的过程中,将数据模板作为模板选择器的参数注入,代码如下:
<ContentControl Name="MyContentControl">
<ContentControl.ContentTemplateSelector>
<local:ElementPropContentTemplateSelector BoxTemplate="{StaticResource BoxGirder}" SlabTemplate="{StaticResource Slab}" TGirderTemplate="{StaticResource TGirder}"/>
</ContentControl.ContentTemplateSelector>
</ContentControl>
此外,在Windows.Resources中,需要定义数据模板,代码如下:
<Window.Resources>
<DataTemplate x:Key="BoxGirder">
<StackPanel >
..........................
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="Slab">
<StackPanel >
..........................
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="TGirder">
<StackPanel >
..........................
</StackPanel>
</DataTemplate>
<Window.Resources>
- WPF中的数据模板使用方式之一:ContentControl、ContentTemplate和TemplateSelector的使用
- WPF UserControl和ContentControl的区别
- WPF(ContentControl和ItemsControl)
- WPF ContentControl绑定父元素的DataContext
- WPF中的模板(五)- 使用Style
- 推荐:WPF中的使用视频流的两种方式
- WPF中的ChildWindow----WPF的toolkit使用
- WPF中的ChildWindow----WPF的toolkit使用
- wpf之ContentControl
- WPF 模板使用详解
- WPF中的数据模板(DataTemplate)
- WPF中的数据模板(DataTemplate)
- WPF中的数据模板(DataTemplate)
- WPF中的数据模板(DataTemplate)
- WPF中的数据模板(DataTemplate)
- WPF中的数据模板(DataTemplate)
- C# 中的用户自定义控件和WPF的配合使用
- WPF中如何使用代码操作数据模板生成的控件
- Day7之面向对象笔记
- codeforces 143B Help Kingdom of Far Far Away 2(模拟)
- IO流/属性类/序列化
- win10宿主机下VM虚拟机Ubuntu不能联网问题解决
- 《数据结构算法与应用》编写一个函数changeLength2D,用以改变一个二维数组的长度。二维数组的每一维的长度都是可以变化的
- WPF中的数据模板使用方式之一:ContentControl、ContentTemplate和TemplateSelector的使用
- 车牌号和身份证号的提取
- C++之日历
- gulp
- JAVAC 编译原理
- Bits Equalizer UVA
- Building Data Models with PowerPivot_进阶篇
- Django 快速搭建博客 第十节(修复首页,阅读量的数据)
- Ubuntu16.10 firefox57.0的更新