DataTrigger 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示在绑定数据满足指定条件时应用属性值或执行操作的触发器。
public ref class DataTrigger : System::Windows::TriggerBase, System::Windows::Markup::IAddChild
[System.Windows.Markup.ContentProperty("Setters")]
public class DataTrigger : System.Windows.TriggerBase, System.Windows.Markup.IAddChild
[System.Windows.Markup.ContentProperty("Setters")]
[System.Windows.Markup.XamlSetMarkupExtension("ReceiveMarkupExtension")]
public class DataTrigger : System.Windows.TriggerBase, System.Windows.Markup.IAddChild
[<System.Windows.Markup.ContentProperty("Setters")>]
type DataTrigger = class
inherit TriggerBase
interface IAddChild
[<System.Windows.Markup.ContentProperty("Setters")>]
[<System.Windows.Markup.XamlSetMarkupExtension("ReceiveMarkupExtension")>]
type DataTrigger = class
inherit TriggerBase
interface IAddChild
Public Class DataTrigger
Inherits TriggerBase
Implements IAddChild
- 继承
- 属性
- 实现
示例
在以下示例中,该ItemsSourceListBox位置绑定到 Place 对象的位置ObservableCollection<T>。 放置 对象具有属性 Name 和 State。
每个对象都显示一个 Place 对象。ListBoxItemListBox 示例中 Style 将应用于每个 ListBoxItem。
指定DataTrigger此项时,如果“位置”数据项的状态为“WA”,则相应ListBoxItem项的前景设置为红色。
<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>
以下示例演示如何在绑定数据满足指定条件时使用 DataTrigger、 BeginStoryboard 操作和 Storyboard 动画处理属性。 该示例在控件中 ListBox 显示清单信息。 它使用一个 DataTrigger 动画 Opacity 处理每一个包含缺货书籍的 ListBoxItem 动画。
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DataTriggerStoryboardExample">
<Page.Resources>
<XmlDataProvider x:Key="InventoryData" XPath="Inventory/Books">
<x:XData>
<Inventory xmlns="">
<Books>
<Book ISBN="0-7356-0562-9" Stock="in" Number="9">
<Title>XML in Action</Title>
<Summary>XML Web Technology</Summary>
</Book>
<Book ISBN="0-7356-1370-2" Stock="in" Number="8">
<Title>Programming Microsoft Windows With C#</Title>
<Summary>C# Programming using the .NET Framework</Summary>
</Book>
<Book ISBN="0-7356-1288-9" Stock="out" Number="7">
<Title>Inside C#</Title>
<Summary>C# Language Programming</Summary>
</Book>
<Book ISBN="0-7356-1377-X" Stock="in" Number="5">
<Title>Introducing Microsoft .NET</Title>
<Summary>Overview of .NET Technology</Summary>
</Book>
<Book ISBN="0-7356-1448-2" Stock="out" Number="4">
<Title>Microsoft C# Language Specifications</Title>
<Summary>The C# language definition</Summary>
</Book>
</Books>
<CDs>
<CD Stock="in" Number="3">
<Title>Classical Collection</Title>
<Summary>Classical Music</Summary>
</CD>
<CD Stock="out" Number="9">
<Title>Jazz Collection</Title>
<Summary>Jazz Music</Summary>
</CD>
</CDs>
</Inventory>
</x:XData>
</XmlDataProvider>
<Style x:Key="AnimatedListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="Margin" Value="0,2,0,2" />
<Setter Property="Padding" Value="0,2,0,2" />
<Style.Triggers>
<DataTrigger
Binding="{Binding XPath=@Stock}"
Value="out">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="Opacity"
From="0.25" To="0.5" Duration="0:0:1"
RepeatBehavior="Forever"
AutoReverse="True"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard FillBehavior="Stop">
<DoubleAnimation
Storyboard.TargetProperty="Opacity"
To="1" Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Page.Resources>
<StackPanel>
<ListBox HorizontalAlignment="Center"
ItemContainerStyle="{StaticResource AnimatedListBoxItemStyle}"
Padding="2">
<ListBox.ItemsSource>
<Binding Source="{StaticResource InventoryData}"
XPath="*"/>
</ListBox.ItemsSource>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock FontSize="12" Margin="0,0,10,0">
<TextBlock.Text>
<Binding XPath="Title"/>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Page>
注解
Style、 ControlTemplate和 DataTemplate 所有都有一个触发器集合。 允许 DataTrigger 在数据对象的属性值与指定的 Value属性值匹配时设置属性值。 例如,如果要显示对象列表 Employee ,则可能希望前景颜色根据每个 Employee's 当前出席情况而有所不同。 (例如, Employees 当前正在度假的人显示有紫色前景。在某些情况下,创建转换器或使用 DataTemplateSelector转换器可能更合适。 有关详细信息,请参阅 数据模板化概述。
请注意,必须为数据触发器指定 Binding 属性和 Value 属性 DataTrigger 才能有意义。 如果未指定一个或两个属性,则会引发异常。
对象的 Setters 属性 DataTrigger 只能包含 Setter 对象。 向 Setter 对象添加子级 DataTrigger 会隐式将其添加到 SetterBaseCollection 该 DataTrigger 对象的子级。 EventSetter 不支持对象;仅 Style.Setters 支持 EventSetter 对象。
构造函数
| 名称 | 说明 |
|---|---|
| DataTrigger() |
初始化 DataTrigger 类的新实例。 |
属性
| 名称 | 说明 |
|---|---|
| Binding |
获取或设置生成数据对象的属性值的绑定。 |
| DependencyObjectType |
获取包装 DependencyObjectType 此实例的 CLR 类型。 (继承自 DependencyObject) |
| Dispatcher |
获取与此DispatcherDispatcherObject关联的值。 (继承自 DispatcherObject) |
| EnterActions |
获取在触发器对象处于活动状态时要应用的对象集合 TriggerAction 。 此属性不适用于类 EventTrigger 。 (继承自 TriggerBase) |
| ExitActions |
获取在触发器对象变为非活动状态时要应用的对象集合 TriggerAction 。 此属性不适用于类 EventTrigger 。 (继承自 TriggerBase) |
| IsSealed |
获取一个值,该值指示此实例当前是否密封(只读)。 (继承自 DependencyObject) |
| Setters |
获取对象的集合,该集合 Setter 描述数据项满足指定条件时要应用的属性值。 |
| Value |
获取或设置要与数据对象的属性值进行比较的值。 |
方法
显式接口实现
| 名称 | 说明 |
|---|---|
| IAddChild.AddChild(Object) |
添加子对象。 |
| IAddChild.AddText(String) |
将节点的文本内容添加到对象。 |