使用 DataTrigger 来应用属性值

当前表示不会告诉我们某个 Task 是家庭任务还是办公室任务。记住 Task 对象拥有类型为 TaskType 的 TaskType 属性,该类型是一个枚举,其值可以为 Home 和 Work。

在下面的示例中,DataTrigger 将 border 元素的 BorderBrush 设置为 Yellow(如果 TaskType 属性为 TaskType.Home)。

 

<DataTemplate x:Key="myTaskTemplate">

...

<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=TaskType}">
<DataTrigger.Value>
<local:TaskType>Home</local:TaskType>
</DataTrigger.Value>
<Setter TargetName="border" Property="BorderBrush" Value="Yellow"/>
</DataTrigger>
</DataTemplate.Triggers> ... </DataTemplate>

 

家庭任务的边界显示为黄色,办公室任务的边界显示为浅绿色。

 

在此示例中,DataTrigger 使用 Setter 来设置属性值。触发器类也拥有 EnterActionsExitActions 属性,这些属性允许您开始一组操作,例如动画操作。而且,还有一个MultiDataTrigger 类,它允许您根据多个数据绑定属性值应用更改。

 

就性能而言,使用转换器创建上述效果的效率要高一点。 另外,创建自己的转换器使您可以获得更多的灵活性,因为您提供的是自己的逻辑。 最后,您选择的技术取决于您当时的具体情况和您的偏好。 有关如何编写转换器的信息,请参见IValueConverter

 

DataTemplate 中有哪些内容?

在前面的示例中,我们使用 DataTemplate.Triggers 属性将触发器放入 DataTemplate 中。 触发器的 Setter 设置 DataTemplate 中元素(Border 元素)的属性值。 但是,如果您的 Setters 相关属性不是当前 DataTemplate 中元素的属性,则使用 Style(用于 ListBoxItem 类)设置属性更合适(如果您要绑定的控件是 ListBox)。 例如,如果您想要在鼠标指向某一项时让您的 Trigger 对该项的 Opacity 值进行动画处理,则需要在 ListBoxItem 样式中定义触发器。 有关示例,请参见 Introduction to Styling and Templating Sample(样式和模板化简介示例)。

通常需要注意:DataTemplate 会应用于每个生成的 ListBoxItem(有关它实际应用的方式和场合的更多信息,请参见 ItemTemplate 页)。 DataTemplate 仅与数据对象的表示和外观有关。 在大多数情况下,所有其他表示方面(例如,项在被选中时的外观或 ListBox 排列项的方式)不在 DataTemplate 定义范围内。 有关示例,请参见对 ItemsControl 进行样式和模板处理一节。

 

 

参考

[WPF系列]-数据邦定之DataTemplate 使用 DataTrigger 来应用属性值的更多相关文章

  1. [WPF系列]-数据邦定之DataTemplate 根据对象属性切换模板

      引言 书接上回[WPF系列-数据邦定之DataTemplate],本篇介绍如何根据属性切换模板(DataTemplate)   切换模板的两种方式:   使用DataTemplateSelecto ...

  2. [WPF系列]-数据邦定之DataTemplate 对分层数据的支持

    到目前为止,我们仅讨论如何绑定和显示单个集合. 某些时候,您要绑定的集合包含其他集合. HierarchicalDataTemplate 类专用于 HeaderedItemsControl 类型以显示 ...

  3. [WPF系列]-数据邦定之DataTemplate简介

    引言 WPF 数据模板化模型为定义数据的表示形式提供了很大的灵活性.WPF 控件有支持自定义数据表示形式的内置功能.首先介绍下如何定义Datatemplate,然后再介绍其他数据模板化功能,例如根据自 ...

  4. [WPF系列]-数据邦定之DataTemplate 对 ItemsControl 进行样式和模板处理

    引言   即使 ItemsControl 不是 DataTemplate 所用于的唯一控件类型,将 ItemsControl 绑定到集合仍然很常见. 在 DataTemplate 中有哪些内容一节中, ...

  5. ASP.NET中数据邦定效率问题的一点看法 - 转载(自由的天空)

    在 做Asp.NET开发的时候经常用到DataList.Repeater等,用这些控件的时候经常用到数据邦定,很多程序员都是按照MS提供的方 法<%#DataBinder.Eval(Contai ...

  6. ajax取到数据后如何拿到data.data中的属性值

    今天遇到的ajax取到数据后如何拿到data.data中的属性值的问题 比如拿到了数据 我要取出data中的name 题外话:当然取名最好别取什么奇怪的xiaobi

  7. fastreport for .net 数据邦定

    C# Code: private void button4_Click(object sender, EventArgs e){   //打印主从表数据    string file = Applic ...

  8. [WPF系列]-TreeView的常用事项

    引言 项目经常会用Treeview来组织一些具有层级结构的数据,本节就将项目使用Treeview常见的问题作一个总结. DataBinding数据绑定 DataTemplate自定义 <Hier ...

  9. [WPF系列]-ListBox

    引言 本文就WPF中的ListBox常用项给以实例代码演示,包括隐蔽属性的设置,Style设置,以及ControlTemplate的自定义.   Listbox平滑滚动 <ListBox Ite ...

随机推荐

  1. Java aes加密C#解密的取巧方法

    摘要: 项目开发过程中遇到一个棘手的问题:A系统使用java开发,通过AES加密数据,B系统使用C#开发,需要从A系统获取数据,但在AES解密的时候遇到麻烦.Java的代码和C#的代码无法互通. Ja ...

  2. C# 洗牌算法

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   C#洗牌算法如下: class Program { ...

  3. jQuery模拟打字逐字输出代码

    效果查看:http://hovertree.com/texiao/jquery/70/ jQuery键盘打出逐字逐句显示特效,逐字逐句显示文字 还可以设置每个文字随机颜色: http://hovert ...

  4. Java的HTTP通信

    在Android中,HTTP通信可以用Volley,在Java中不能使用Volley,只能使用DefaultHttpClient,HttpPost和HttpResponse. /* * 向服务器发送数 ...

  5. php中用GD绘制折线图

    php中用GD绘制折线图,代码如下: Class Chart{ private $image; // 定义图像 private $title; // 定义标题 private $ydata; // 定 ...

  6. 数三角形 bzoj 1201

    数三角形(1s 128MB)triangle [题目描述] 小苏看到一个这样的等边三角形:该等边三角形每边的长度为n且被分成n等份,于是每条边就有n-1个等分点.而整个三角形被连接两个不同边的等分点且 ...

  7. 在多行列表中id同名的<a>标签点击事件处理方法

    Struts2标签 问题描述:最近项目中在使用struts迭代标签动态生成列表的过程中,由于每一行li元素中包含<a>超链接,如下图 一开始超链接是这样的<a href=“#” id ...

  8. 电脑上不安装Oracle时,C# 调用oracle数据库,Oracle客户工具

    Oracle的安装包通常都比较大,安装又比较费时,而且如果安装过程中不幸出错,各种蛋疼,即便是安装过N遍的老手,有时候安装起来也觉得挺烦.而工作中,通常服务器上面安装oracle就可以了,我们本地电脑 ...

  9. 接入统计Crash的工具Crashlytics-ios

    1. 注册账户 登录网站 https://get.fabric.io/ 来注册新的账户 2. account confirmed之后就出现相应的设置页面,设置你的team的名称 3. 出现页面提示下载 ...

  10. HTML5学习笔记一 简单学习HTML5

    什么是HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言: HyperText Markup Language HTML 不是一种编程语言,而是一种标记语言 标记语言是一 ...