Para permitir un mayor control de la frecuencia de parpadeo y tal en su código detrás, le sugiero tener un evento enrutado en su UserControl llamado Blink:
public static readonly RoutedEvent BlinkEvent = EventManager.RegisterRoutedEvent("Blink", RoutingStrategy.Direct, typeof(RoutedEventHandler), typeof(LedControl));
public event RoutedEventHandler Blink
{
add { AddHandler(BlinkEvent, value); }
remove { RemoveHandler(BlinkEvent, value); }
}
En su código detrás de usted puede configurar un temporizador para provocar el evento sin embargo a menudo le gusta (esto también le da la oportunidad a parpadear la luz de una sola vez cuando lo desee:
RaiseEvent(new RoutedEventArgs(LedControl.Blink));
Ahora en XAML, el siguiente código haría visible un resplandor, y establecería la propiedad de relleno de su elipse (ledEllipse) en un degradado radial verde brillante, luego devolvería el valor de relleno a un verde oscuro apagado (que podría cambiar a gris si te gusta). Simplemente puede cambiar la duración para que el parpadeo dure más tiempo.
<UserControl.Triggers>
<EventTrigger RoutedEvent="local:LedControl.Blink">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="glow"
Storyboard.TargetProperty="Opacity"
To="100"
AutoReverse="True"
Duration="0:0:0.075" />
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ledEllipse"
Storyboard.TargetProperty="Fill"
Duration="0:0:0.15">
<ObjectAnimationUsingKeyFrames.KeyFrames>
<DiscreteObjectKeyFrame KeyTime="0:0:0.01">
<DiscreteObjectKeyFrame.Value>
<RadialGradientBrush>
<!--bright Green Brush-->
<GradientStop Color="#FF215416" Offset="1"/>
<GradientStop Color="#FE38DA2E" Offset="0"/>
<GradientStop Color="#FE81FF79" Offset="0.688"/>
</RadialGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.15" >
<DiscreteObjectKeyFrame.Value>
<RadialGradientBrush>
<!--dim Green Brush-->
<GradientStop Color="#FF21471A" Offset="1"/>
<GradientStop Color="#FF33802F" Offset="0"/>
<GradientStop Color="#FF35932F" Offset="0.688"/>
</RadialGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames.KeyFrames>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</UserControl.Triggers>
Además, estoy referencia directa a la elipse 'ledEllipse' y su correspondiente DropShadowEffect 'brillo' que se definen en el ledControl de la siguiente manera (Redlight es sólo otro pincel degradado radial que comienzo mi propiedad llenado de llevado a) :
<Ellipse x:Name="statusLight" Height="16" Width="16" Margin="0" Fill="{DynamicResource redLight}" >
<Ellipse.Effect>
<DropShadowEffect x:Name="glow" ShadowDepth="0" Color="Lime" BlurRadius="10" Opacity="0" />
</Ellipse.Effect>
</Ellipse>
Nota: El DropShadowEffect se introdujo en .Net 3.5, pero se puede quitar que si usted no quiere un efecto de brillo (pero se ve bien en un fondo de color de contraste sólido).
Supongo que estás tratando de hacer animación en Visual Studio - Use Expression Blend para eso - tiene herramientas de diseño para crear animaciones. –
Yo soy. Debo admitir que después de pasar algo de tiempo en esto, no llegar a ningún lado, y enfrentarme a una fecha límite, comencé a ponerme un poco frenético y perdí un poco la cabeza. Activé Expression Blend y vi que el guión gráfico que creaste funcionaba bien. Solo necesitaba hacer algunos pequeños ajustes para obtener el comportamiento que quiero. – MedicineMan
¿Se puede hacer con algo así como un temporizador o una devolución de llamada, con dos elipses cuya visibilidad se alterna? Pero me gusta la respuesta de Pax también. :) –