原文:在Style中将EventTrigger与Trigger同时使用

现在在看WPF关于Trigger的有关实例,然后找到一篇不错的文章,特此转载,收藏一下!!
 
一般情况下,使用Style时,可以对ControlTemplate添加Triggers,既可以添加EventTrigger,又可以Trigger。
 
但无论如何,在Triggers节点下,是无法同时添加EventTrigger与Trigger复合条件的。拿RadioButton为例,在非选中状态下,MouseEnter与MouseLeave会触发颜色变化事件;在选中状态下,可能又不需要这样的事件。那如何判断MouseEnter与MouseLeave时,到底是选中还是非选中状态呢?
 
以下是非选中状态下的ControlTemplate定义:
 <ControlTemplate
x:Key="UnCheckedImageRadioButtonTemplate"

     
TargetType="{x:Type style:ImageRadioButton}">

  <Grid
x:Name="grdButton">

   <Image
x:Name="PART_OVER_img"

      
HorizontalAlignment="Left"

      
VerticalAlignment="Top"

      
Opacity="0"

      
Source="{Binding Path=ImageOver, Mode=OneWay,
RelativeSource={RelativeSource TemplatedParent}}"
/>

   <Image
Name="PART_img"

      
HorizontalAlignment="Left"

      
VerticalAlignment="Top"

      
Source="{Binding Path=ImageNormal, Mode=OneWay,
RelativeSource={RelativeSource TemplatedParent}}"
/>

  </Grid>
  <ControlTemplate.Triggers>

<EventTrigger
RoutedEvent="Mouse.MouseEnter"

       
SourceName="PART_img">

    <BeginStoryboard
Storyboard="{StaticResource stbFadeIn}" />

   </EventTrigger>

<EventTrigger
RoutedEvent="Mouse.MouseLeave"

       
SourceName="PART_img">

    <BeginStoryboard
Storyboard="{StaticResource stbFadeOut}" />

   </EventTrigger>

<EventTrigger
RoutedEvent="Mouse.MouseUp"

       
SourceName="PART_img">

    <BeginStoryboard
Storyboard="{StaticResource stbFadeIn}" />

   </EventTrigger>

<EventTrigger
RoutedEvent="Mouse.MouseDown"

       
SourceName="PART_img">

    <BeginStoryboard
Storyboard="{StaticResource stbFadeOut}" />

   </EventTrigger>

</ControlTemplate.Triggers>

</ControlTemplate>

 
这里,我定义了MouseEnter,MouseLeave,MouseUp和MouseDown事件时触发的Storyboard。但要如何判断这些事件触发时,到底是选中还是非选中呢?我最开始尝试使用MultiTrigger,可MultiTrigger中不能定义EventTrigger,因此不能同时判断MouseEnter事件与选中状态。
 
下面列出了Style的定义,通过Style定义,可以巧妙的将选中属性的判断,定义在ControlTemplate以外。
 
 <Style TargetType="{x:Type
style:ImageRadioButton}">

  <Setter
Property="Focusable"

    Value="False"
/>

  <Setter
Property="Cursor"

    Value="Hand"
/>

  <Style.Triggers>

   <Trigger
Property="IsChecked"

     
Value="True">

    <Setter
Property="Template"

      Value="{StaticResource
CheckedImageRadioButtonTemplate}" />

   </Trigger>

<Trigger
Property="IsChecked"

     
Value="False">

    <Setter
Property="Template"

      Value="{StaticResource
UnCheckedImageRadioButtonTemplate}" />

   </Trigger>

</Style.Triggers>

 </Style>

 
红色字体的部分,就是在Style中,先对选中状态进行的判断,然后ControlTemplate中不需要再同时判断选中状态与MouseEnter事件。然后将先前定义的包含Triggers定义的ControlTemplate简化一下,得到不需要检测EventTrigger的模板。
 
 <ControlTemplate
x:Key="CheckedImageRadioButtonTemplate"

     
TargetType="{x:Type style:ImageRadioButton}">

  <Grid
x:Name="grdButton">

   <Image
x:Name="PART_OVER_img"

      
HorizontalAlignment="Left"

      
VerticalAlignment="Top"

      
Source="{Binding Path=ImageOver, Mode=OneWay,
RelativeSource={RelativeSource TemplatedParent}}"
/>

  </Grid>

</ControlTemplate>

 
顺利完成!
这样就可以解决EventTrigger与Trigger同时使用的问题了。
希望对大家有所帮助!

最新文章

  1. C# 3DES加密
  2. js中url解码
  3. [转载]SVN如何恢复已删除文件或文件夹
  4. C# WinForm 技巧十: 开发工具
  5. C#入门篇6-6:字符串操作 StringBiulder string char[]之间的转化
  6. JVM——类的加载过程
  7. 高并发网络编程之epoll详解
  8. JAVA-位运算符
  9. MySQL忘记密码 办法
  10. Swift 算法实战之路:基本语法与技巧
  11. linux变量心得
  12. BootStrap-validator 使用记录(JAVA SpringMVC实现)
  13. win7双系统安装openSUSE13.2解决【引导加载器安装期间出错】问题
  14. Ubuntu安装Flash视频插件
  15. synchronized修饰方法和代码块的区别
  16. 微信内点击链接或扫描二维码可直接用外部浏览器打开H5链接的解决方案
  17. Sublime Text3—自带快捷键介绍
  18. Django进阶使用
  19. 美团面试-canvas实现放射图
  20. mac安装sublime text 3,含注册码

热门文章

  1. HTML/CSS 选择符优先级
  2. NoSql中的B-tree、B+tree和LSM-tree 分类: B7_HBASE 2015-03-15 18:27 85人阅读 评论(0) 收藏
  3. Swift--使图片360&#176; 周期旋转
  4. [Recompose] Compute Expensive Props Lazily using Recompose
  5. VMware Workstation 12 安装mac os x 10.11
  6. goodFeaturesToTrack——Shi-Tomasi角点检测
  7. 洛谷 P2197 nim游戏
  8. Android 动态改变高度以及计算长度的EditText
  9. Kinect 摄像头范围介绍和玩家舒适距离实测
  10. IDEA多模块父子依赖maven项目war包部署