DataTrigger数据触发器

实现效果:

  1. MultiDataTrigger 的 Condition 元素指定,如果 Place 数据项的 Name 和 State 分别为 Portland 和 OR,则相应的 ListBoxItem 的背景设置为 Cyan。

clipboard.png
实践:

  1. MultiDataTrigger在绑定数据满足一组条件时应用(或多项)属性值或执行操作。

代码:
一个及多个条件的触发器,

<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 local: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>

xaml代码:

<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>

扩展:

  1. MultiDataTrigger 对象与 MultiTrigger 类似,但 MultiDataTrigger 的条件基于绑定数据的属性值,而不是 UIElement 的属性值。
  2. 在 MultiDataTrigger 中,当数据项的属性值与指定的 Value 匹配时,会满足一个条件。 然后,可以在满足所有条件时使用 Setter 或 EnterActions 和 ExitActions 属性来应用更改或启动操作。
  3. MultiDataTrigger 对象的 Setters 属性只能由 Setter 对象组成。 将 Setter 子项添加到 MultiDataTrigger 对象会将其隐式添加到 MultiDataTrigger 对象的 SetterBaseCollection。 EventSetter 对象不受支持;只有 Style.Setters 支持 EventSetter 对象。

李志玮
22 声望34 粉丝

求索~~


引用和评论

0 条评论