UWP / Winrt applcation中故事板中的间歇性异常

时间:2016-04-05 06:24:43

标签: wpf xaml windows-runtime win-universal-app

我在通过视图状态触发用户控件上的故事板时,间歇性地收到以下异常。

WinRT信息:无法解析指定对象上的TargetProperty(背景)。(SolidColorBrush.Color)

我的故事板在下面 -

<StackPanel Orientation="Horizontal">
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup>
                <VisualState x:Name="Connecting">
                    <Storyboard RepeatBehavior="Forever">
                        <ColorAnimationUsingKeyFrames Storyboard.TargetName="Bd1" Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)">
                            <DiscreteColorKeyFrame Value="#F7F7F7" KeyTime="0:0:0" />
                            <DiscreteColorKeyFrame Value="#6CBF25" KeyTime="0:0:1" />
                            <DiscreteColorKeyFrame Value="#F7F7F7" KeyTime="0:0:5" />
                        </ColorAnimationUsingKeyFrames>
                        <ColorAnimationUsingKeyFrames Storyboard.TargetName="Bd1" Storyboard.TargetProperty="(BorderBrush).(SolidColorBrush.Color)">
                            <DiscreteColorKeyFrame Value="#919191" KeyTime="0:0:0" />
                            <DiscreteColorKeyFrame Value="#01851F" KeyTime="0:0:1" />
                            <DiscreteColorKeyFrame Value="#919191" KeyTime="0:0:5" />
                        </ColorAnimationUsingKeyFrames>

                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
        <Border x:Name="Bd1" Height="5" />
    </StackPanel>

我是如何触发它的

VisualStateManager.GoToState(this, "Connecting", false);

此视觉状态通常在UserControl加载时立即触发。

2 个答案:

答案 0 :(得分:1)

失败是因为SolidColorBrush上没有定义Bd1Background的类型为Brush,因此您可以像这样使用SolidColorBrush进行初始化,并且您的动画应该可以正常工作。我添加了BorderBrush以及您为其设置动画和Width,以便您可以在屏幕上看到它

<Border x:Name="Bd1" Width="200" Height="5" Background="Red" BorderBrush="Red" />

答案 1 :(得分:1)

您的边框没有默认颜色。因此,您无法从Storyboard访问它。

这将有效:

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="BorderAnimationGroup">
            <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0"/>
            </VisualStateGroup.Transitions>
            <VisualState x:Name="Connecting">
                <Storyboard RepeatBehavior="Forever">
                    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="Bd1">
                        <EasingColorKeyFrame KeyTime="0" Value="#FFF7F7F7"/>
                        <EasingColorKeyFrame KeyTime="0:0:1" Value="#FF6CBF25"/>
                        <EasingColorKeyFrame KeyTime="0:0:5" Value="#FFF7F7F7"/>
                    </ColorAnimationUsingKeyFrames>
                    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="Bd1">
                        <EasingColorKeyFrame KeyTime="0" Value="#FF919191"/>
                        <EasingColorKeyFrame KeyTime="0:0:1" Value="#FF01851F"/>
                        <EasingColorKeyFrame KeyTime="0:0:5" Value="#FF919191"/>
                    </ColorAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Border x:Name="Bd1" BorderBrush="#FF919191" BorderThickness="1" Height="5" Background="White">
        <Interactivity:Interaction.Behaviors>
            <Core:EventTriggerBehavior>
                <Core:GoToStateAction StateName="Connecting"/>
            </Core:EventTriggerBehavior>
        </Interactivity:Interaction.Behaviors>
    </Border>
</StackPanel>