WPF ItemsControl DataTrigger EnterActions动画未启动
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF ItemsControl DataTrigger EnterActions动画未启动相关的知识,希望对你有一定的参考价值。
我在ItemsControl
模板中的动画有问题,这是另一个ItemsControl
的模板的一部分。我想要一个代表一个Icon的路径来改变它的颜色,并在某个条件变为真时不断旋转。
当DataTrigger
属性变为Fill
时,producing
通常起作用,导致Path的true
从Gray变为LightGreen。但是,动画无法启动。当我让动画以Loaded
事件开始时(正如您在评论部分中看到的那样),它会正常启动。所以我知道动画以及DataTrigger
配置正确。当我在外面的ItemsControl
中放置相同的Path(只是复制和粘贴)并将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>
我终于找到了解决方案。在尝试用DoubleAnimation
替换ColorAnimation
之后,使用(Path.Fill).(SolidColorBrush.Color)
作为TargetProperty
,我收到错误,该路径未指向DependencyProperty
。只有当我在SolidColorBrush
中明确定义Setter
时才能解决这个问题,这导致我尝试使用RenderTransform
的Path
:
<Path.Style>
<Style TargetType="Path">
<Setter Property="RotateTransform">
<Setter.Value>
<RotateTransform x:Name="gearPathTransform"/>
</Setter.Value>
</Setter>
<!-- ... -->
</Style>
之后动画按预期工作。我仍然不知道为什么这只是内部ItemsControl
所必需的,并且ColorAnimation
没有错误也是令人讨厌的,但至少它现在正在工作。
以上是关于WPF ItemsControl DataTrigger EnterActions动画未启动的主要内容,如果未能解决你的问题,请参考以下文章
WPF - ItemsControl - 如何找到ItemTemplate中的“CheckBox”项?
WPF ItemsControl ListBox ListView比较
WPF NotifyIcon 中 ItemsControl 中按钮的命令绑定