【问题标题】:WPF ItemsControl DataTrigger EnterActions Animation not startingWPF ItemsControl DataTrigger EnterActions 动画未开始
【发布时间】:2019-02-19 03:58:13
【问题描述】:

ItemsControl 的模板中的动画是另一个 ItemsControl 的模板的一部分,我遇到了动画问题。我想要一个代表图标的路径,当某个条件变为真时,它会改变它的颜色并不断旋转。

DataTrigger 通常可以工作,当producing 属性更改为true 时,导致路径的Fill 从 Gray 变为 LightGreen。但是,动画没有开始。当我让动画以Loaded 事件开始时(正如您在评论部分中看到的那样),它会正常启动。所以我知道动画以及DataTrigger 配置正确。 当我将 same Path(只需复制和粘贴)放在外部ItemsControl 并将DataTrigger 更改为相应DataType 的属性时,动画也按预期工作。所以嵌套的ItemsControls似乎有问题,但我不知道它可能是什么。

<ItemsControl ItemsSource="{Binding Computers}">
    <ItemsControl.ItemTemplate>
      <DataTemplate DataType="{x:Type models:ClientComputerWrapper}">
        <Border Margin="5" BorderBrush="Black" BorderThickness="1" Padding="5">
          <StackPanel>

            <!-- Some Content -->

            <ItemsControl ItemsSource="{Binding PlcReaderStatuses}">
              <ItemsControl.ItemTemplate>
                <DataTemplate DataType="{x:Type resources:PlcReaderStatusResource}">
                  <DockPanel LastChildFill="False">

                    <!-- Some Content -->

                    <Path DockPanel.Dock="Left" HorizontalAlignment="Left" Data="{StaticResource GearIconGeometry}" Stretch="Uniform" RenderTransformOrigin="0.5, 0.5">
                      <Path.RenderTransform>
                        <RotateTransform x:Name="gearPathTransform"/>
                      </Path.RenderTransform>
                      <Path.Style>
                        <Style TargetType="Path">
                          <Setter Property="Fill" Value="Gray"/>
                          <Style.Triggers>
                            <DataTrigger Binding="{Binding IsProducing}" Value="True">
                              <Setter Property="Fill" Value="LightGreen"/>
                              <DataTrigger.EnterActions>
                                <BeginStoryboard x:Name="rotateStoryBoard">
                                  <Storyboard>
                                    <DoubleAnimation Storyboard.TargetProperty="(Path.RenderTransform).(RotateTransform.Angle)" To="360" Duration="0:0:2" RepeatBehavior="Forever"/>
                                  </Storyboard>
                                </BeginStoryboard>
                              </DataTrigger.EnterActions>
                              <DataTrigger.ExitActions>
                                <RemoveStoryboard BeginStoryboardName="rotateStoryBoard"/>
                              </DataTrigger.ExitActions>
                            </DataTrigger>
                            <EventTrigger RoutedEvent="Loaded">
                              <!--<BeginStoryboard x:Name="rotateStoryBoard">
                                <Storyboard>
                                  <DoubleAnimation Storyboard.TargetProperty="(Path.RenderTransform).(RotateTransform.Angle)" To="360" Duration="0:0:2" RepeatBehavior="Forever"/>
                                </Storyboard>
                              </BeginStoryboard>-->
                            </EventTrigger>
                          </Style.Triggers>
                        </Style>
                      </Path.Style>
                    </Path>
                  </DockPanel>
                </DataTemplate>
              </ItemsControl.ItemTemplate>
            </ItemsControl>

          </StackPanel>
        </Border>
      </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

【问题讨论】:

    标签: wpf animation storyboard datatrigger


    【解决方案1】:

    我终于找到了解决办法。在尝试将DoubleAnimation 替换为ColorAnimation,使用(Path.Fill).(SolidColorBrush.Color) 作为TargetProperty 后,我收到一个错误,即路径未指向DependencyProperty。仅当我在 Setter 中明确定义 SolidColorBrush 时才解决了这个问题,这导致我尝试与 PathRenderTransform 相同:

    <Path.Style>
      <Style TargetType="Path">
        <Setter Property="RotateTransform">
          <Setter.Value>
            <RotateTransform x:Name="gearPathTransform"/>
          </Setter.Value>
        </Setter>
    
        <!-- ... -->
    
      </Style>
    

    之后动画按预期工作。我仍然不知道为什么这仅在内部ItemsControl 中是必需的,而且ColorAnimation 没有错误也令人讨厌,但至少它现在可以工作了。

    【讨论】:

      猜你喜欢
      • 2011-11-30
      • 2013-09-24
      • 2018-09-30
      • 2021-11-28
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      • 2017-04-17
      • 1970-01-01
      相关资源
      最近更新 更多