DataTrigger的几个用法
1.用在textbox等输入控件上,验证输入是否合法。
<Window.Resources>
<Style TargetType="TextBox">
<Style.Triggers>
<!--Binding属性会把数据源不断送过来,送过来的值与Value属性一致就被触发。-->
<DataTrigger Binding="{Binding RelativeSource={x:Static RelativeSource.Self},Path=Text.Length}" Value="0">
<!--这里使用RelativeSource将控件自己作为数据源,当文本框文本长度为0时触发-->
<!--也可以用Converter来转换成Bool值验证长度、格式(Convert方法中用正则表达式验证)等
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=Text,Converter={StaticResource dc}}" Value="True">
-->
<Setter Property="BorderBrush" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style >
</Window.Resources> <TextBox Height="23" HorizontalAlignment="Left" Margin="50,66,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="50,108,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" />
运行结果:文本框文本长度为0,则显示设置的样式。

2.combox等列表控件里面,也可以用做数据筛选。
对于集合数据或者列表数据,满足一定条件的就显示成另外一种样式。
1)先添加一个转化器:
class Text2BoolConvert : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null) return false;
if (string.IsNullOrEmpty(value.ToString())) return false;
if (!Regex.IsMatch(value.ToString(), "^[1-9]\\d*$")) return false; return int.Parse(value.ToString()) < ;
} public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
2)映射命名空间,把转换器放在资源中:
xmlns:c="clr-namespace:WpfDemo.VelueConvert" <Window.Resources>
<c:Text2BoolConvert x:Key="t2b"></c:Text2BoolConvert>
</Window.Resources>
3)添加ComBox显示列表
<ComboBox Height="23" HorizontalAlignment="Left" Margin="334,83,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120">
<!--ItemTemplate-->
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Display}" Name="t1"></TextBlock>
<TextBlock Text="--" Name="t2"/>
<TextBlock Text="{Binding Tag}" Name="t3"></TextBlock>
</StackPanel>
<!--DataTrigger -->
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=Tag,Converter={StaticResource t2b}}" Value="True">
<Setter Property="Foreground" TargetName="t1" Value="Red" />
<Setter Property="Foreground" TargetName="t2" Value="Red" />
<Setter Property="Foreground" TargetName="t3" Value="Red" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
4)在Window加载的时候给ComBox指定数据源
List<object> objList = new List<object>();
for (int i = ; i < ; i += )
{
objList.Add(new { Display = "d" + i.ToString(), Tag = i.ToString() });
} comboBox1.ItemsSource = objList;
3.特殊状态的样式
<!--EditMode的背景-->
<UserControl.Resources>
<Style x:Key="menuText" TargetType="TextBlock" >
<Style.Triggers>
<!--设置修改时候的样式-->
<DataTrigger Binding="{Binding EditMode}" Value="0">
<Setter Property="Foreground" Value="DimGray" />
</DataTrigger>
</Style.Triggers>
<Setter Property="FontSize" Value="13" />
</Style>
</UserControl.Resources>
DataTrigger的几个用法的更多相关文章
- WPF DataTrigger的两个用法
1.用在textbox等输入控件上,验证输入是否合法.首先定义一个Converter, 2.Xaml里面这样子写,意思是输入的数字,如果小于100则显示为红色. 3.combox等列表控件里面,也可以 ...
- WPF DataTriger 用法示例代码
用法1: <DataGridTemplateColumn Header="{lex:LocText ExamineRoom}"> <DataGridTemplat ...
- WPF中触发器Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种
WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作. WPFtrigger的主要类型有:Trigger. ...
- WPF触发器(Trigger、DataTrigger、EventTrigger)
WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作. WPFtrigger的主要类型有:Trigger. ...
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
随机推荐
- JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 一,概述 在Java语言中 ...
- Uva 10382 (区间覆盖) Watering Grass
和 Uva 10020几乎是一样的,不过这里要把圆形区域转化为能够覆盖的长条形区域(一个小小的勾股定理) 学习一下别人的代码,练习使用STL的vector容器 这里有个小技巧,用一个微小量EPS来弥补 ...
- 漫游kafka实战篇之搭建Kafka开发环境
上篇文章中我们搭建了kafka的服务器,并可以使用Kafka的命令行工具创建topic,发送和接收消息.下面我们来搭建kafka的开发环境. 添加依赖 搭建开发环境需要引入kafka的jar包 ...
- codevs 4919 线段树练习4
线段树水题.我是ziliuziliu,我是最强的#include<iostream> #include<cstdio> #include<cstring> #inc ...
- phpcms二级菜单
二级 {pc:content action="category" catid="0" siteid="$siteid" order=&quo ...
- 【英语】Bingo口语笔记(29) - Run系列
- MornUI 源码阅读笔记
1. label的mouseChildren属性为true,但label本身是不需要监听textfield的任何事件的, 个人猜测是为了给TextInput, TextArea用的,因为后两者需要监听 ...
- Android下监听Home键
网上看到demo,亲测了以下机器和设备,均测试通过: 测试通过的手机: 1.华为荣耀3(Android 4.2.2) 2.小米2s(Android 4.1.1) 3.联想的手机 (Android2.3 ...
- ios iPhone的一些基础知识,扫盲
iPhone 4(2010 年):初始系统: iOS 4.0(GSM 版) (苹果第一次采用 iOS 为移动系统命名),iOS 4.2.2(CDMA 版)可以升级至:iOS 7.1.2 iPhone ...
- Nginx实现多个站点使用一个端口(配置Nginx的虚拟主机)
Nginx 是一个轻量级高性能的 Web 服务器, 并发处理能力强, 消耗资源小, 无论是静态服务器还是网站, Nginx 表现更加出色, 作为 Apache 的补充和替代使用率越来越高,目前很多大型 ...