Есть ли способ шаблонировать стиль в XAML для анимации цвета в сгруппированной серии эллипсов? - PullRequest
0 голосов
/ 08 мая 2019

Есть ли способ в WPF создать стиль шаблона для StackPanel, который анимирует цвет в сгруппированной серии элементов управления Ellipse со скоростью 1 секунда и, что наиболее важно, запускается общим свойством видимости группы StackPanel?

У меня нет успеха в создании триггера в стиле шаблона, который работает со свойством видимости. Вот то, что я попробовал, стиль, который должен был быть применен к стеку, содержащий три элемента управления Ellipse:

<UserControl.Resources>

    <Color x:Key="C_387DD4" R="56" G="125" B="212"  />
    <Color x:Key="C_D3D3D3" R="211" G="211" B="211"  />

    <Style TargetType="FrameworkElement" x:Key="AnimateOnVisibility">
        <Setter Property="Visibility" Value="Collapsed"/>
        <Style.Triggers>
            <Trigger Property="Visibility" Value="Visible">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Ellipse.Fill).(SolidColorBrush.Color)"
                                                    Storyboard.TargetName="EL01" 
                                                    Duration="0:0:4"
                                                    FillBehavior="HoldEnd"
                                                    RepeatBehavior="Forever">
                                <ColorAnimationUsingKeyFrames.KeyFrames>
                                    <DiscreteColorKeyFrame KeyTime="0:0:0" Value="{StaticResource C_D3D3D3}"/>
                                    <DiscreteColorKeyFrame KeyTime="0:0:1" Value="{StaticResource C_387DD4}"/>
                                    <DiscreteColorKeyFrame KeyTime="0:0:2" Value="{StaticResource C_387DD4}"/>
                                    <DiscreteColorKeyFrame KeyTime="0:0:3" Value="{StaticResource C_387DD4}"/>
                                </ColorAnimationUsingKeyFrames.KeyFrames>
                            </ColorAnimationUsingKeyFrames>
                            <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Ellipse.Fill).(SolidColorBrush.Color)"
                                                    Storyboard.TargetName="EL02" 
                                                    Duration="0:0:4"
                                                    FillBehavior="HoldEnd"
                                                    RepeatBehavior="Forever">
                                <ColorAnimationUsingKeyFrames.KeyFrames>
                                    <DiscreteColorKeyFrame KeyTime="0:0:0" Value="{StaticResource C_D3D3D3}"/>
                                    <DiscreteColorKeyFrame KeyTime="0:0:1" Value="{StaticResource C_D3D3D3}"/>
                                    <DiscreteColorKeyFrame KeyTime="0:0:2" Value="{StaticResource C_387DD4}"/>
                                    <DiscreteColorKeyFrame KeyTime="0:0:3" Value="{StaticResource C_387DD4}"/>
                                </ColorAnimationUsingKeyFrames.KeyFrames>
                            </ColorAnimationUsingKeyFrames>
                            <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Ellipse.Fill).(SolidColorBrush.Color)"
                                                    Storyboard.TargetName="EL03" 
                                                    Duration="0:0:4"
                                                    FillBehavior="HoldEnd"
                                                    RepeatBehavior="Forever">
                                <ColorAnimationUsingKeyFrames.KeyFrames>
                                    <DiscreteColorKeyFrame KeyTime="0:0:0" Value="{StaticResource C_D3D3D3}"/>
                                    <DiscreteColorKeyFrame KeyTime="0:0:1" Value="{StaticResource C_D3D3D3}"/>
                                    <DiscreteColorKeyFrame KeyTime="0:0:2" Value="{StaticResource C_D3D3D3}"/>
                                    <DiscreteColorKeyFrame KeyTime="0:0:3" Value="{StaticResource C_387DD4}"/>
                                </ColorAnimationUsingKeyFrames.KeyFrames>
                            </ColorAnimationUsingKeyFrames>
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
            </Trigger>
        </Style.Triggers>
    </Style>

</UserControl.Resources>

В конечном итоге мне нужен горизонтальный ряд эллипса, который, когда свойство видимости StackPanel переходит в Visible, обеспечивает анимацию цвета в эллипсах слева направо - это дает пользователю ощущение «Пожалуйста, подождите», пока мой программное обеспечение делает некоторые фоновые вещи.

...