VisualStateManager抛出异常

时间:2015-03-19 11:17:08

标签: xaml windows-phone-8 c++-cx

我目前正在为按钮实现自定义样式,并希望使用VisualStateManager定义不同的状态(例如,按下)。

<Style x:Name="customStyle" TargetType="Button">
<Setter Property="ClickMode" Value="Release"/>
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="Button">
            <Grid x:Name="RootElement" Background="{TemplateBinding Background}">
                <VisualStateManager.VisualStateGroups>
                    <VisualStateGroup x:Name="CommonStates">
                        <VisualState x:Name="Normal"/>
                        <VisualState x:Name="Pressed">
                            <Storyboard>
                                <ColorAnimation Storyboard.TargetName="RootElement"
                                                Storyboard.TargetProperty="Background"
                                                To="Red"
                            </Storyboard>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateManager.VisualStateGroups>
                ...
            </Grid>
        </ControlTemplate>
    </Setter.Value>
</Setter>

正如您所看到的,我想在按下状态时将网格的背景属性更改为红色,但抛出以下异常:

  

gymlog.exe中0x7708210B(KERNELBASE.DLL)的第一次机会异常:0x40080201:WinRT发起错误(参数:0x800F1000,0x00000056,0x0178E4F4)。

如果我跳转到特定的内存地址,则会显示以下内容:

  

由于类型不兼容

,ColorAnimation无法用于动画属性背景

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

Background属性不是颜色。它是一个画笔,因此您无法使用ColorAnimation为其添加动画效果。可以使用ObjectAnimationUsingKeyFrames对画笔进行动画处理。但首先你必须创建一个具有目标颜色的新画笔(在你的情况下它是红色的)。

您可以将SolidColorBrush添加到与您的风格相同的地方的资源:

<SolidColorBrush x:Name="RedBrush" Color="Red" />

<!-- And here goes your button style... -->

然后你可以在对象动画中使用它。

<VisualState x:Name="Pressed">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootElement"
                                       Storyboard.TargetProperty="Background">
            <DiscreteObjectKeyFrame KeyTime="0" 
                                    Value="{StaticResource RedBrush}"/>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>