EventTrigger触发条件

时间:2016-01-07 13:04:18

标签: c# wpf

我有一个事件触发器。 我希望它只在条件发生时启用 例如,仅当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>

换句话说,我有一个触发器,可以在加载窗口时加载故事板。

我希望能够为每个项目启用/禁用此触发器。

1 个答案:

答案 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中声明这些名称空间:

  • 的xmlns:ⅰ= “http://schemas.microsoft.com/expression/2010/interactivity”
  • 的xmlns:EI = “http://schemas.microsoft.com/expression/2010/interactions”

ConditionBehavior对象评估ComparisonCondition:如果前者为真,则允许ControlStoryboardAction运行。

我希望这个小样本可以为您提供解决问题的提示。