UWP/Winrt 应用程序中情节提要中的间歇性异常

Intermittent exception in storyboard in UWP/Winrt applcation

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

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 时立即触发。

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

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

您的边框没有默认颜色。因此你不能从情节提要中访问它。

这会起作用:

<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>