如果使用Converter设置TargetProperty,ColorAnimation不起作用吗?

时间:2016-06-10 09:17:30

标签: wpf xaml

我的NoOneCares模型有一个DateTemplate,这是一个简单的路径。

现在,当触发DataTrigger时,我希望我的Path闪烁3次(Storyboard,ColorAnimation on Path.Fill)。

每次触发DataTrigger时,下面的示例都会崩溃:

System.InvalidOperationException:无法动画'(0)。(1)'在不可变对象实例上。

但是当我直接设置Fill属性时Fill =" Red" (而不是ValueConverter),它完美无缺。

为什么会这样?我仍然需要转换器将填充设置为正确的颜色:/

 <DataTemplate DataType ="{x:Type models:NoOneCares}">
            <Path Stroke="White" Data="M 5,15 L5,10 L10,0 L 0,0 L 5,10" >

            <Path.Fill>
                <MultiBinding Converter="{StaticResource colorConverter}">
                    <Binding Path="NoOneCares"></Binding>
                    <Binding Path="NoOneCares"></Binding>
                </MultiBinding>
            </Path.Fill>

                <Path.Style>
                    <Style TargetType="Path">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding AnimationTrigger}" Value="{StaticResource numberTest}">
                                <DataTrigger.EnterActions>
                                    <BeginStoryboard Name="fsadf">
                                        <Storyboard>
                                            <ColorAnimationUsingKeyFrames AutoReverse="True" RepeatBehavior="3x" Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)">
                                                <LinearColorKeyFrame KeyTime="0:0:0.3"
                                             Value="White"/>
                                            </ColorAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </DataTrigger.EnterActions>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Path.Style>
            </Path>
        </DataTemplate>

1 个答案:

答案 0 :(得分:1)

似乎转换器返回一个冻结(不可变)画笔,例如Brushes.Red。您可以通过IsFrozen属性进行检查。这些物品无法改变。

您应该通过调用Clone()方法克隆画笔并返回克隆对象 - 它不会被冻结并且可以更改。