WPF-触发器

原文 http://www.cnblogs.com/luluping/archive/2011/07/26/2117681.html

WPF快速指导6:触发器     本文摘要:     1:属性触发器;     2:数据触发器;     3:事件触发器;

    Style、ControlTemplate 和 DataTemplate 都有触发器集合。     属性触发器只检查WPF从属属性,而数据触发器则可检查任何一种可绑定的属性。属性触发器一般用来检查WPF可视元素的属性,而数据触发器则通常用来检查不可视对象的属性。     属性触发器:通过此机制,一个属性的更改会在另一个属性中触发即时或动态更改。     数据触发器:通过此机制,事件会在属性中触发动态更改。     数据触发器:EventTrigger,它根据事件的引发来启动一组操作,但这类操作仅限于动画。

一:属性触发器     查看代码片段1:

   <Style TargetType="ListBoxItem">
      <Setter Property="Opacity" Value="0.5" />
      <Setter Property="MaxHeight" Value="75" />
      <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
          <Trigger.Setters>
            <Setter Property="Opacity" Value="1.0" />
          </Trigger.Setters>
        </Trigger>
      </Style.Triggers>
    </Style>

    表示在ListBoxItem的IsSelected属性变为True的时候,其另外一个属性Opacity的值变为1.0。 1.1单个触发器     代码片段1就是单个触发器。 1.2多个触发器     可以为ListBoxItem设置多个触发器。 1.3多条件属性触发器     多条件触发器就是说,同时满足几个条件的时候才触发行为。     如代码片段2: 

               <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="IsFocused" Value="True"></Condition>
                        <Condition Property="Content" Value="{x:Null}"></Condition>
                    </MultiTrigger.Conditions>
                    <Setter Property="ToolTip" Value="content is null!"></Setter>
                </MultiTrigger>

二:数据触发器     使用 DataTrigger,可以在数据对象的属性值与指定的 Value 匹配时设置属性值。例如,在显示 Employee 对象列表时,可能希望前景色根据每个 Employee 的当前出勤情况而变化。(例如,用紫色前景色显示当前正在休假的 Employee。)     查看代码片段3

       <Window.Resources>
            <c:Places x:Key="PlacesData"/>

            <Style TargetType="ListBoxItem">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=State}" Value="WA">
                        <Setter Property="Foreground" Value="Red" />
                    </DataTrigger>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding Path=Name}" Value="Portland" />
                            <Condition Binding="{Binding Path=State}" Value="OR" />
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Background" Value="Cyan" />
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>

            <DataTemplate DataType="{x:Type c:Place}">
                <Canvas Width="160" Height="20">
                    <TextBlock FontSize="12"
             Width="130" Canvas.Left="0" Text="{Binding Path=Name}"/>
                    <TextBlock FontSize="12" Width="30"
                 Canvas.Left="130" Text="{Binding Path=State}"/>
                </Canvas>
            </DataTemplate>
        </Window.Resources>

        <StackPanel>
            <TextBlock FontSize="18" Margin="5" FontWeight="Bold"
    HorizontalAlignment="Center">Data Trigger Sample</TextBlock>
            <ListBox Width="180" HorizontalAlignment="Center" Background="Honeydew"
    ItemsSource="{Binding Source={StaticResource PlacesData}}"/>
        </StackPanel>

2.1单条件触发     以上的DataTrigger就是一个单条件触发器。 2.2多条件触发     以上的MultiDataTrigger就是一个多条件触发器。

三:事件触发器     属性触发器用来检查从属属性的值,数据触发器用来检查CLR属性的值,而事件触发器用来监视事件。当一个事件发生的时候,事件触发器就会通过引发相关的动画事件来响应。     如代码片段4:

    <Style TargetType="ListBoxItem">
      <Setter Property="Opacity" Value="0.5" />
      <Setter Property="MaxHeight" Value="75" />
      <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
          <Trigger.Setters>
            <Setter Property="Opacity" Value="1.0" />
          </Trigger.Setters>
        </Trigger>
        <EventTrigger RoutedEvent="Mouse.MouseEnter">
          <EventTrigger.Actions>
            <BeginStoryboard>
              <Storyboard>
                <DoubleAnimation
                  Duration="0:0:0.2"
                  Storyboard.TargetProperty="MaxHeight"
                  To="90"  />
              </Storyboard>
            </BeginStoryboard>
          </EventTrigger.Actions>
        </EventTrigger>
        <EventTrigger RoutedEvent="Mouse.MouseLeave">
          <EventTrigger.Actions>
            <BeginStoryboard>
              <Storyboard>
                <DoubleAnimation
                  Duration="0:0:1"
                  Storyboard.TargetProperty="MaxHeight"  />
              </Storyboard>
            </BeginStoryboard>
          </EventTrigger.Actions>
        </EventTrigger>
      </Style.Triggers>
    </Style>
时间: 2024-10-28 01:02:36

WPF-触发器的相关文章

wpf 触发器操作控件

问题描述 <grid><imagevisibility=hidden></image></grid>用触发器实现鼠标在grid上mouseover时image出现 解决方案 解决方案二:在grid上写触发代码

WPF – 使用触发器

WPF提供了很重要的一个东西就是绑定Binding, 它帮助我们做了很多事情,这个我们在WPF学习之绑定这篇里边有讲过.对于Binding我们可以设置其绑定对象,关系,并通过某种规则去验证输入,或者转换值等等,这一切的背后是省去了很多我们需要自己去处理的代码.而对于WPF最主要表现的东西-渲染UI,当然是我们必须去了解和把握的了.美工设计了很多效果,并把其设计成样式展现(很大程度上我们应该认为Style也是一种资源),而作为程序员的我们不应该只是简单的拿来这些拼凑的效果,根据程序的逻辑和用户的操

《Programming WPF》翻译 第5章 6.触发器

目前为止,我们已经看到样式,作为一个Setter元素的集合.当应用一个样 式时,在Setter元素中描述的设置不会无条件地应用(除非复写每一个设置的实 例).另一方面,触发器是一种在条件中包装了一个或更多Setter元素的方式, 如果条件为真,相应地Setter元素会被执行,而条件为false的时候,属性值返 回预先触发的值. WPF伴随着3种你可以在一个触发器条件中检查的事情一起发生,依赖属 性,.NET属性,.NET事件.头两个直接改变基于条件的值,如我所描述的:而最 后一个,一个事件触发器

xaml-c#wpf的样式的事件触发器问题

问题描述 c#wpf的样式的事件触发器问题 请问大神这个问题是什么意思?应该如何改正? 解决方案 WPF 样式触发器 解决方案二: 就是个事件触发器-在鼠标进入时-触发某个按钮透明度的变化

wpf中的触发器详解

原文 http://zwkufo.blog.163.com/blog/static/25882512009724113250883/ 7.1.2 简单逻辑的表示--触发器(1) 在本章的多处介绍中都会涉及触发器的使用.顾名思义,触发器(Trigger)就是当某种条件满足后即完成相应逻辑功能的一部分程序组成.在当前的WPF中,Trigger一共有三种类型,它们分别是: (1)属性触发器:其对应的类是Trigger.它在特定关联属性发生变化时被触发. (2)数据触发器:其对应的类是DataTrigg

WPF中的触发器简单总结

原文 http://blog.sina.com.cn/s/blog_5f2ed5cb0100p3ab.html 触发器,从某种意义上来说它也是一种Style,因为它包含有一个Setter集合,并根据一个或多个条件执行Setter中的属性改变.因为复用的缘故,Styles是放置触发器的最好位置.但对于每个FrameworkElement来说都有Triggers集合,你也可以放在Triggers集合里.触发器有三种类型: 属性触发器Property Trigger:当Dependency Prope

wpf请问这段事件触发器代码为什么会异常?

问题描述 wpf请问这段事件触发器代码为什么会异常? <Button Grid.Row="1" Grid.Column="1" Margin="45,30,45,40" Content="确定" Name="button1"> <Button.Triggers> <EventTrigger RoutedEvent="Mouse.MouseEnter">

WPF 如何禁用 ismouseover 触发器

问题描述 想让鼠标移到button上的时候改变背景思路是在MouseEnter中改变背景,但是实际上并不生效,每次鼠标移到button上都会出现系统默认的背景.于是我重写了一个button的style,在ismouseover的触发器中改变背景,结果生效.但是我想在代码中能够动态的改变背景.1.请问有没有办法禁用ismouseover触发器,从而可以在MouseEnter事件中进行动态改变.2.ismouseover触发器能不能进行动态的改变背景呢? 解决方案 解决方案二:什么叫做动态改变,,在

《Programming WPF》翻译 第5章 7.控件模板

如果仔细的看我们当前的TTT游戏,会发现Button对象并没有完全为我们工作 .哪些TTT面板有内圆角? 图5-14 这里,我们真正需要的是能够保持按钮的行为,如支持内容和点击事件,但 是我们想要接管这些按钮的外观.WPF允许这种方式,因为内在的控件创建的时 候是缺少外观性的,例如,他们提供行为,但是外观可以被完全包装在客户端控 件的外面. 还记得我们是如何使用数据模板,来为非可视化对象提供外观的么?我们能 够使用控件模板对控件做同样的事情,这将是一组StoryBoard,触发器,以及大 多数重

WPF中的Style(风格,样式)

在WPF中我们可以使用Style来设置控件的某些属性值,并使该设置影响到指定范围内的所有该类控件或影响指定的某一控件,比如说我们想将窗口中的所有按钮都保持某一种风格,那么我们可以设置一个Style,而不必分别设置每个按钮的风格. Style是作为一种资源被保存下来的. 看下面的例子: <Window.Resources>        <Style TargetType="Button">       <Setter Property="Fore