WPF圆动画旋转、边框、内容渲染、阴影

    <Grid>
        <Viewbox Margin="20">
            <Ellipse x:Name="ellipse1" Width="150" Height="150" StrokeThickness="10" RenderTransformOrigin="0.5,0.5" SnapsToDevicePixels="True">
                <Ellipse.Effect>
                    <DropShadowEffect ShadowDepth="0" BlurRadius="50" Color="Blue" />
                </Ellipse.Effect>
                <Ellipse.RenderTransform>
                    <RotateTransform x:Name="rotate1" Angle="0" />
                </Ellipse.RenderTransform>
                <Ellipse.Triggers>
                    <EventTrigger RoutedEvent="Loaded" SourceName="ellipse1">
                        <EventTrigger.Actions>
                            <BeginStoryboard>
                                <Storyboard RepeatBehavior="Forever">
                                    <!--Fill-->
                                    <DoubleAnimation Storyboard.TargetName="gs31" Storyboard.TargetProperty="Offset" From="0" To="0.7" Duration="0:0:5" BeginTime="00:00:00" />
                                    <DoubleAnimation Storyboard.TargetName="gs32" Storyboard.TargetProperty="Offset" From="0" To="0.7" Duration="0:0:5" BeginTime="00:00:00" />
                                    <DoubleAnimation Storyboard.TargetName="gs41" Storyboard.TargetProperty="Offset" From="0.014" To="0.714" Duration="0:0:5" BeginTime="00:00:0" />
                                    <DoubleAnimation Storyboard.TargetName="gs42" Storyboard.TargetProperty="Offset" From="0.014" To="0.714" Duration="0:0:5" BeginTime="00:00:0"  />
                                    <DoubleAnimation Storyboard.TargetName="gs31" Storyboard.TargetProperty="Offset" From="0.7" To="1" Duration="0:0:5" BeginTime="00:00:05" />
                                    <DoubleAnimation Storyboard.TargetName="gs32" Storyboard.TargetProperty="Offset" From="0.7" To="1" Duration="0:0:5" BeginTime="00:00:05" />
                                    <DoubleAnimation Storyboard.TargetName="gs41" Storyboard.TargetProperty="Offset" From="0.714" To="1" Duration="0:0:4.77" BeginTime="00:00:5" />
                                    <DoubleAnimation Storyboard.TargetName="gs42" Storyboard.TargetProperty="Offset" From="0.714" To="1" Duration="0:0:4.77" BeginTime="00:00:5"  />
                                    <!--Stroke-->
                                    <DoubleAnimation Storyboard.TargetName="gs51" Storyboard.TargetProperty="Offset" From="0" To="0.7" Duration="0:0:5" BeginTime="00:00:00" />
                                    <DoubleAnimation Storyboard.TargetName="gs52" Storyboard.TargetProperty="Offset" From="0" To="0.7" Duration="0:0:5" BeginTime="00:00:00" />
                                    <DoubleAnimation Storyboard.TargetName="gs61" Storyboard.TargetProperty="Offset" From="0.014" To="0.714" Duration="0:0:5" BeginTime="00:00:00" />
                                    <DoubleAnimation Storyboard.TargetName="gs62" Storyboard.TargetProperty="Offset" From="0.014" To="0.714" Duration="0:0:5" BeginTime="00:00:00"  />
                                    <DoubleAnimation Storyboard.TargetName="gs51" Storyboard.TargetProperty="Offset" From="0.7" To="1" Duration="0:0:5" BeginTime="00:00:5" />
                                    <DoubleAnimation Storyboard.TargetName="gs52" Storyboard.TargetProperty="Offset" From="0.7" To="1" Duration="0:0:5" BeginTime="00:00:5" />
                                    <DoubleAnimation Storyboard.TargetName="gs61" Storyboard.TargetProperty="Offset" From="0.714" To="1" Duration="0:0:4.77" BeginTime="00:00:5" />
                                    <DoubleAnimation Storyboard.TargetName="gs62" Storyboard.TargetProperty="Offset" From="0.714" To="1" Duration="0:0:4.77" BeginTime="00:00:5"  />
                                    <!--Rotate-->
                                    <DoubleAnimation Storyboard.TargetName="rotate1" Storyboard.TargetProperty="Angle" From="0" To="360" Duration="0:0:10" />
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger.Actions>
                    </EventTrigger>
                </Ellipse.Triggers>
                <Ellipse.Stroke>
                    <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                        <GradientStop Offset="0" Color="DarkBlue" />
                        <GradientStop x:Name="gs51" Offset="0" Color="DarkBlue" />
                        <GradientStop x:Name="gs52" Offset="0" Color="Aqua" />
                        <GradientStop x:Name="gs61" Offset="0" Color="Aqua" />
                        <GradientStop x:Name="gs62" Offset="0" Color="DarkBlue" />
                        <GradientStop Offset="1" Color="DarkBlue" />
                    </LinearGradientBrush>
                </Ellipse.Stroke>
                <Ellipse.Fill>
                    <RadialGradientBrush>
                        <GradientStop Offset="0" Color="DarkBlue" />
                        <GradientStop x:Name="gs31" Offset="0" Color="DarkBlue" />
                        <GradientStop x:Name="gs32" Offset="0" Color="Aqua" />
                        <GradientStop x:Name="gs41" Offset="0" Color="Aqua" />
                        <GradientStop x:Name="gs42" Offset="0" Color="DarkBlue" />
                        <GradientStop Offset="1" Color="DarkBlue" />
                    </RadialGradientBrush>
                </Ellipse.Fill>
            </Ellipse>
        </Viewbox>
    </Grid>
原文地址:https://www.cnblogs.com/RedSky/p/6958074.html