关闭

Silverlight中的DataTemplate

标签: SilverlightC#
1269人阅读 评论(0) 收藏 举报
分类:

        在Silverlight中每一个控件都有DataTemplate类型的属性。那么DataTemplate到底有什么作用呢?MSDN上的解释是“用来描述数据对象的可视结构。通常使用 DataTemplate 指定数据的直观表示”。 可能单从字面上的理解起来不是很容易,下面用ListBox的两个案例来诠释一下DataTemplate的作用。

        首先,在界面上拖一个ListBox,直接给ListBox的ItemsSource属性赋上一个集合。       

      <Grid x:Name="LayoutGrid" Background="White">
         <ListBox x:Name="list"/>
      </Grid>
            this.Loaded += (s, e) =>
            {
                this.list.ItemsSource = new List<Test>()
                {
                    new Test { A = "A", B = "B", Text = "显示了", Color = Colors.Red.ToString() },
                    new Test { A = "A", B = "B", Text = "显示了", Color = Colors.Red.ToString() },
                    new Test { A = "A", B = "B", Text = "显示了", Color = Colors.Red.ToString() },
                    new Test { A = "A", B = "B", Text = "显示了", Color = Colors.Red.ToString() },
                    new Test { A = "A", B = "B", Text = "显示了", Color = Colors.Red.ToString() },
                    new Test { A = "A", B = "B", Text = "显示了", Color = Colors.Red.ToString() },
                    new Test { A = "A", B = "B", Text = "显示了", Color = Colors.Red.ToString() },
                    new Test { A = "A", B = "B", Text = "显示了", Color = Colors.Red.ToString() },
                    new Test { A = "A", B = "B", Text = "显示了", Color = Colors.Red.ToString() },
                    new Test { A = "A", B = "B", Text = "显示了", Color = Colors.Red.ToString() },
                };                 
            };

   从上面的例子我们看到,ListBox直接把集合中每一个Test对象ToString()后显示出来。在 ListBox中的ItemTemplate属性是用来设置每一个ListBoxItem的数据可视化显示,其数据类型是DataTemplate类型。下面,为ListBox编写数据可视化结构模板DataTemplate。

     <UserControl.Resources>
        <Style TargetType="Ellipse" x:Key="EllipseStyle" >
            <Setter Property="Height" Value="10"/>
            <Setter Property="Width" Value="10"/>
            <Setter Property="Fill" Value="Red"/>
            <Setter Property="Stroke" Value="Black"/>
            <Setter Property="StrokeThickness" Value="1"/>
            <Setter Property="Margin" Value="0,0,5,0"/>
        </Style>

        <DataTemplate x:Key="ListBoxItemStyle">
        <StackPanel x:Name="LayoutSP" Orientation="Horizontal">
            <TextBlock Text="测试绑定1:"/>
            <TextBlock Text="{Binding A}"/>
            <TextBlock Text=";测试绑定2:"/>
            <TextBlock Text="{Binding B}"/>
            <TextBlock Text=";测试CheckBox:"/>
            <CheckBox x:Name="chk">
                <StackPanel Orientation="Horizontal" >
                        <Ellipse Style="{StaticResource EllipseStyle}" Fill="{Binding Color}"/>
                        <TextBlock Text="{Binding Text}"/>
                </StackPanel>
            </CheckBox>
        </StackPanel>
        </DataTemplate>
    </UserControl.Resources>

    <Grid x:Name="LayoutGrid" Background="White">
        <ListBox x:Name="list" ItemTemplate="{StaticResource ListBoxItemStyle}"/>
    </Grid>


   从上面的例子发现,集合中每一个对象的属性值,都按照DataTemplate的模板格式显示出来了。从上面两个例子,已经很直观的说明了DataTemplate的含义了。

  Datatemplate在使用时,应注意以下几点:

1.Silverlight中的DataTemplate为编码的最小单元,无法用托管代码改变。

2.DataTemplate只能用Xaml创建,如果一定要用代码动态创建DataTemplate,只好用 XamlLoader.Load(XamlString)的方法来创建.

3.不能引用当前控件的资源,只能引用全局资源

4.不能动态的绑定事件。


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

WPF DataTemplate绑定的简单学习

对于普通的实体类的绑定,如果只是简单的添加删除的话不需要用到INotifyPropertyChanged接口,这样的话比较简单,只需要在datatemplate中绑定后台的属性即可。然后直接往里面加入...
  • ccx_john
  • ccx_john
  • 2013-12-03 13:53
  • 1264

Silverlight 运行原理 解析综合版(二)

Silverlight 运行原理 解析综合版(二) 2011-10-09 21:05 by 沐海, 564 阅读, 0 评论, 收藏,  编辑 几种RIA技术 Silverlig...
  • david_xgl
  • david_xgl
  • 2014-08-29 18:31
  • 917

DataTemplate-根据条件选择不同模板

为了不同的条件选择模板,可以实现一个DataTemplateSelector。 模板选择器是继承自DataTemplateSelector派生并重写了SelectTemplate方法并返回了你需要的模...
  • LH806732
  • LH806732
  • 2014-09-30 16:47
  • 1105

silverlight学习之路(1)创建 RIA Services 解决方案

学习过程真的很悲剧啊! 开发工具:VS2012+silverlight5
  • duyelang
  • duyelang
  • 2014-07-22 14:50
  • 807

silverlight根据json字符串动态创建实体类

1、接收json字符串: //用JsonValue转换json字符串是为了之后获得json字符串的每行数据和每一列的列名 JsonValue jv = JsonValue.Parse(json);...
  • mutou965175859
  • mutou965175859
  • 2015-07-10 13:22
  • 1656

Silverlight管理系统-源代码(SilverlightOA开发框架主要提供二次开发)

 Silverlight OA系统简介 系统功能简介 l 程序界面介绍: 左侧为主菜单,主菜单可以展开和收起,主菜单下面的所有模块都可以在数据库中扩展增加,模块的权限和用户角色挂钩,可以在...
  • dotfun
  • dotfun
  • 2014-05-14 14:38
  • 7965

完美实现Silverlight动态加载

这段时间利用项目空隙,研究了一下Silverlight的动态加载技术。动态加载分为两种: 1、网页局部加载(即一个网页上有多个Silverlight应用) 2、单个Silverlight应用动态加...
  • Andeewu
  • Andeewu
  • 2013-11-18 22:44
  • 1271

Silverlight 控件的ToolTip封装工具使用

在Silverlight项目开发中,控件可以设置鼠标移入时的手势,同样还可以设置ToolTip,利用Silverlight编写代码或者Blend设计工具均可以设置ToolTip,但都是一些文字提示,如...
  • taomanman
  • taomanman
  • 2015-08-27 09:52
  • 1238

WPF中DataTemplate基本原理与缺陷分析

WPF中DataTemplate基本原理与缺陷分析 这个文章来源于这样一个问题。下面的两种做 法,在效果上有什么不同?(注:Header是一个自定义DP。)   TabItem He...
  • deng_xi
  • deng_xi
  • 2015-08-22 10:56
  • 740

Silverlight实现文件的下载[很简单]

思路:使用HyperlinkButton的NavigateUri属性来访问ashx程序,来实现文件下载。 一. 新建一个Silverlight应用程序 在web项目所在的目录下新建名为Files的...
  • dangercheng
  • dangercheng
  • 2013-11-25 16:54
  • 2860
    个人资料
    • 访问:25809次
    • 积分:607
    • 等级:
    • 排名:千里之外
    • 原创:35篇
    • 转载:5篇
    • 译文:0篇
    • 评论:7条
    最新评论