在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的使用的更多相关文章

  1. WPF中的数据模板(DataTemplate)(转)

    原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/30/694388.html WPF中的数据模板(DataTemplate)        ...

  2. WPF中的数据模板(DataTemplate)

    原文:WPF中的数据模板(DataTemplate) WPF中的数据模板(DataTemplate)                                                   ...

  3. wpf中的数据模板

    wpf中的模板分为数据模板和控件模板,我们可以通过我们自己定制的数据模板来制定自己想要的数据表现形式.例如:时间的显示可以通过图片,也可以通过简单数字表现出来. 例如: (1)先在Demo这个命名空间 ...

  4. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  5. WPF中的数据验证

    数据验证 WPF的Binding使得数据能够在数据源和目标之间流通,在数据流通的中间,便能够对数据做一些处理. 数据转换和数据验证便是在数据从源到目标 or 从目标到源 的时候对数据的验证和转换. V ...

  6. WPF 中获取DataGrid 模板列中控件的对像

    WPF 中获取DataGrid 模板列中控件的对像 #region 当前选定行的TextBox获得焦点 /// <summary> /// 当前选定行的TextBox获得焦点 /// &l ...

  7. WPF中的菜单模板

    原文:WPF中的菜单模板 资源字典代码如下: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xa ...

  8. WPF 后台获得 数据模板里的内容控件(DataTemplate)

    原文:WPF 后台获得 数据模板里的内容控件(DataTemplate) 假如      <Window.Resources> 里 有一个 Datatemplate 我想获得TextBlo ...

  9. WPF的ComboBox 数据模板自定义

    WPF的ComboBox 有些时候不能满足用户需求,需要对数据内容和样式进行自定义,下面就简要介绍一下用数据模板(DataTemplate)的方式对ComboBox 内容进行定制: 原型设计如下: 步 ...

随机推荐

  1. c++ comment

    一.匈牙利命名法[Hungarian]: 广泛应用于象 Microsoft Windows 这样的环境中. Windows 编程中用到的变量(还包括宏)的命名规则匈牙利命名法,这种命名技术是由一 位能 ...

  2. ant 报 make sure you have it in your classpath

    检查build.xml的配置 build.xml配置出错,导致的这个问题

  3. Android源代码下载

    清华大学AOSP镜像: https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

  4. IO流(二)I/O

    一.IO流概述 1.定义:Java的IO流是实现输入输出的基础,它可以方便地实现数据的输入/输出操作. 2.流的分类: (1)按流向来分:输入流和输出流 (2)按操作的数据来分:字节流和字符流 (3) ...

  5. Excel2007制作直方图和正态分布曲线图

    对同一维度的数据分析数据分布范围及分布趋势,要通过制作直方图和正态分布曲线图体现. 例如:已知所有员工的日收入,分析员工收入分布情况(51.7,50.6,57.9,56.9,56.7,56.7,55. ...

  6. 【SpringMVC学习06】SpringMVC中的数据校验

    这一篇博文主要总结一下springmvc中对数据的校验.在实际中,通常使用较多是前端的校验,比如页面中js校验,对于安全要求较高的建议在服务端也要进行校验.服务端校验可以是在控制层conroller, ...

  7. UIWebView 加载网页、文件、 html

    UIWebView  是用来加载加载网页数据的一个框.UIWebView可以用来加载pdf word doc 等等文件 生成webview 有两种方法,1.通过storyboard 拖拽 2.通过al ...

  8. mysql 语句要求

    mysql 语句不可以有单引号,要把单引号替换为双引号!

  9. iOS端App的icon和Launch Image规格实时更新

    启动影像 : iPhone :320 x 480 640 x 960 640*1136 750*1334 1242*2208  iPad :768 x 1004 1536 x 2008 APP图标: ...

  10. SWERC13 Decoding the Hallway

    找规律 S+1 = S +'L'+~rev(S) Problem D Decoding the Hallway Problem D Edward is now 21 years old. He has ...