Göz kırpma oranının daha fazla kontrol edilmesini ve kodunuzun arkada kalmasını sağlamak için, UserControl uygulamanızda, Blink:
adında yönlendirilmiş bir olaya sahip olmanızı öneririz. Şimdi
RaiseEvent(new RoutedEventArgs(LedControl.Blink));
: Bu da size ışığı istediğiniz zaman tek bir defa yanıp fırsatı verir (ancak istediğiniz sıklıkta olayı yükseltmek için bir zamanlayıcı ayarlayabilirsiniz Kodda
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); }
}
XAML'de, aşağıdaki kod bir parıltıyı görünür hale getirir ve elipsinizin (ledEllipse) dolgu özelliğini parlak yeşil radyal gradyana ayarlar, ardından doluluk değerini 'loşlanmamış' bir yeşile döndürür. seversin). Göz kırpma süresinin daha uzun sürmesini sağlamak için süreyi değiştirebilirsiniz. Ayrıca
<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>
, doğrudan 'ledEllipse' elips referans am ve (redlight I benim en yol dolgu özelliğine başlangıç başka bir radyal gradyanlı bir fırça olup) şu şekilde ledControl tanımlanan DropShadowEffect 'parlaklık' karşılık gelen var :
<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>
Not: DropShadowEffect .NET 3.5 tanıtıldı, ancak görevden alabileceğini Eğer bir parlaklık etkisi istemiyoruz (ama düz bir renk kontrast zemin üzerine güzel görünüyor) eğer.
Görsel Studio'da animasyon yapmaya çalıştığınız - Bunun için İfade Karışımı Kullan - animasyonlar oluşturmak için tasarım aracına sahip olduğunu varsayalım. –
. Bunun üzerine biraz zaman geçirdikten, bir yere gitmeden ve bir son teslim tarihine yaklaştıktan sonra biraz çılgınlaşmaya başladım ve başımı biraz kaybettim. Expression Blend'i başlattım ve oluşturduğunuz film şeridinin iyi çalıştığını gördüm. İstediğim davranışı elde etmek için biraz ayarlamalar yapmalıydım. – MedicineMan
Bir zamanlayıcı veya geri çağrı gibi bir şeyle, görünürlüğü değişebilen iki elipsle yapılabilir mi? Ama Pax'ın cevabını da seviyorum. :) –