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 ...
随机推荐
- HDU 1850 (Nim博弈 取胜方案数) Being a Good Boy in Spring Festival
考虑到Bouton定理的证明过程,设n个数的Nim和(异或和)为X,其最高位的1在第k位,那么n个数中一定有个y的第k为也是个1. 将y的数量变为X xor y,那么n的数的Nim和为0,便转为先手必 ...
- 51nod1225 余数之和
打表可以看出规律.分块求就可以了. #include<cstdio> #include<cstring> #include<cctype> #include< ...
- HDU 3127 WHUgirls【二维完全背包】
题意:给出一个长为a,宽为b的布,再给出n个围巾的规格(长x,宽y,价值c),问怎样裁剪能够得到最大的价值. ----第一次做的时候不会---然后放到今天做--发现还是不会---于是又--看题解了-- ...
- mongodb用户授权
1)登录admin 数据库,admin是隐藏的数据库,为mongodb的超级管理员数据表mongo admin新建用户db.createUser({'user':'test','pwd':'12345 ...
- linux CPU loading calculate
http://hi.baidu.com/lionpanther/item/e908c37abdaf1c3f71442380 #include <stdio.h>#include <s ...
- BZOJ 4269 再见Xor
线性基. 求次大值就是再异或一个线性基好了. #include<iostream> #include<cstdio> #include<cstring> #defi ...
- notebook笔记
启动 __main__.py 静态文件 static/ 模板 templates/ 路由 比如tree/handlers.py default_handlers WebSocket ws://loca ...
- 【英文】Bingo口语笔记(18) - Cover系列
cover charge 服务费 cover version 翻唱版本 cover the news 头条新闻
- In App Purchase翻译
一.In App Purchase概览 Store Kit代表App和App Store之间进行通信.程序将从App Store接收那些你想要提供的产品的信息,并将它们显示出来供用户购买.当用户需要购 ...
- Android 图文教学让你彻底理解activity启动模式
我们首先从最简单的开始, standard 这个模式就是默认的模式,我们都知道 当你用这个模式时,每次发送一个intent,都会生成一个新的实例! 我写一个简单的例子: <?xml versio ...