我有一个事件触发器。 我希望它只在条件发生时启用 例如,仅当Viewmodel.IsEnabled属性为true且EventTrigger为RoutedEvent =“Window.Loaded”时才出现
我的问题是MultiDataTrigger和MultiTriggers无法将事件触发器与数据触发器结合使用。
<DataTemplate.Triggers>
<EventTrigger RoutedEvent="Window.Loaded" SourceName="NotificationWindow">
<BeginStoryboard x:Name="FadeInStoryBoard">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="NotificationWindow" From="0.01" To="1" Storyboard.TargetProperty="Opacity" Duration="0:0:2"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</DataTemplate.Triggers>
换句话说,我有一个触发器,可以在加载窗口时加载故事板。
我希望能够为每个项目启用/禁用此触发器。
答案 0 :(得分:0)
您可以使用Blend Interactivity for WPF完成任务。我不知道你的整个DataTemplate,所以在我的样本中我将使用一个发明的。
假设我有一组Person
个对象,我想只为每个属性DoubleAnimation
为真的人启动IsEnabled
。我将我的集合绑定到ItemsControl,然后创建一个“条件”DataTemplate:
<ItemsControl ItemsSource="{Binding Path=People}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Name="Border" BorderBrush="Gray" BorderThickness="1" CornerRadius="4" Margin="2">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:Interaction.Behaviors>
<ei:ConditionBehavior>
<ei:ConditionalExpression>
<ei:ComparisonCondition LeftOperand="{Binding IsEnabled}" RightOperand="True"/>
</ei:ConditionalExpression>
</ei:ConditionBehavior>
</i:Interaction.Behaviors>
<ei:ControlStoryboardAction ControlStoryboardOption="Play">
<ei:ControlStoryboardAction.Storyboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="Border" From="0.01" To="1" Storyboard.TargetProperty="Opacity" Duration="0:0:2"/>
</Storyboard>
</ei:ControlStoryboardAction.Storyboard>
</ei:ControlStoryboardAction>
</i:EventTrigger>
</i:Interaction.Triggers>
<TextBlock Text="{Binding Path=Surname, Mode=OneWay}" Margin="2" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
当然,您必须在XAML中声明这些名称空间:
ConditionBehavior
对象评估ComparisonCondition
:如果前者为真,则允许ControlStoryboardAction
运行。
我希望这个小样本可以为您提供解决问题的提示。