2013-04-04 21 views
6

Sadece ViewModel Properties'imden birine göre görünür yaptığım bir etiketim var.WPF Etiketi (veya başka bir öğe) animasyon kullanarak flaş yapma

<Label HorizontalAlignment="Center" VerticalAlignment="Center" 
     HorizontalContentAlignment="Center" 
     VerticalContentAlignment="Center" 
     FontSize="24" Width="200" Height="200" > 
    <Label.Content > 
     Option in the money! 
    </Label.Content> 
    <Label.Style> 
     <Style TargetType="{x:Type Label}"> 
      <Setter Property="Visibility" Value="Hidden" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding OptionInMoney}" Value="True"> 
        <Setter Property="Visibility" 
       Value="Visible" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Label.Style> 

</Label> 

ben bu en iyi yoldur, ama her durumda, ben de etiket yanıp sönen olmasını istiyorum emin değilim: İşte XAML olduğunu. Açıkçası, sadece görünür olduğunda yanıp sönmesini istiyorum. Birisi bana bazı örnek kodlara işaret edebilir mi yoksa bunu yapmak için hızlı bir örnek yazabilir mi? Bir çeşit tetiklemeye ihtiyacım var, bir animasyon. Muhtemelen etiket artık görünmediğinde tetikleyiciye de ihtiyacım var, böylece animasyonu durduracağım.

Teşekkürler, Dave P.S. Tüm bu WPF hileleri için iyi bir kitap veya site var mı? Kitabı hatırlatanlar için "MFC Cevap Kitabı" gibi bir şey.

+0

Hah - seçenekler ticaret sistemi? :) Hikaye panosu animasyonlarına aşina mısınız? Opacity özelliğini element üzerinde canlandırarak devam edeceğiniz davranışa sahip olabilirsiniz - eğer bir şans bulursam bir örnek koyacağım. – JerKimball

cevap

22

Sen Style.Resources bir Storyboard animasyon eklemek ve DataTrigger arasında EnterActions bölümünden bu başlatabilir.

<Label.Style> 
    <Style TargetType="{x:Type Label}"> 
     <Style.Resources> 
      <Storyboard x:Key="flashAnimation" > 
       <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" AutoReverse="True" Duration="0:0:0.5" RepeatBehavior="Forever" /> 
      </Storyboard> 
     </Style.Resources> 

     <Setter Property="Visibility" Value="Hidden" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding OptionInMoney}" Value="True"> 
       <Setter Property="Visibility" Value="Visible" /> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard Name="flash" Storyboard="{StaticResource flashAnimation}" /> 
       </DataTrigger.EnterActions> 
       <DataTrigger.ExitActions> 
        <StopStoryboard BeginStoryboardName="flash"/> 
       </DataTrigger.ExitActions> 
      </DataTrigger> 

     </Style.Triggers> 
    </Style> 
</Label.Style> 
+0

Fantastik! Özellik (OptionInMoney) false değerine geri döndüğünde veya otomatik olarak gerçekleştiğinde animasyonu durdurmak için ayarlamam gerekir. Yani DataTrigger.ExitActions gerekiyor ve eğer öyleyse, nasıl ayarlayabilirim? Bahsettiğimden, animasyonun diğer yayınlarında bazı tartışmaların, görünür olmamasına rağmen sonsuza dek devam ettiğini gördüm. Tekrar teşekkürler. – Dave

+0

evet, Muhtemelen 'ExitActions' içindeki animasyonu durdurmak için iyi bir fikirdir, 'StopStoryboard' –

+0

Perfect ile cevabı güncelledim. Tekrar teşekkürler. – Dave

0

this post ürününü deneyin. 'Yanıp Sönen TextBlock' olarak adlandırılır, ancak bir Etiket için kolayca bir TextBox takas edebilirsiniz.

+0

Sadece bağlantıya cevap vermekten kaçının. Link-rot'a karşı hassastırlar. – ANeves

2

Storyboard kesinlikle WPF yoldur, ama aynı zamanda basit bir kod ile sağlanabilir:

Opacity üzerinde basit DoubleAnimation

böyle ince

şey çalışmalıdır. Burada bir etiket arka plan yanıp sönmesini sağlayınız, gider:

lblTimer bazı metin ile formunuzda bir Lebel ise, diyelim ki,

Bu VISIBILITY gibi herhangi mülke uygulanabilir "Ben YANIP SÖNÜYOR AM".

// Create a timer. 
private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    DispatcherTimer timer = new DispatcherTimer(); 
    timer.Tick += timer_Tick; 
    timer.Interval = new TimeSpan(0, 0, 0, 0, 500); 
    timer.Start(); 
} 

// The timer's Tick event. 
private bool BlinkOn = false; 
private void timer_Tick(object sender, EventArgs e) 
{ 
    if (BlinkOn) 
    { 
     lblTimer.Foreground = Brushes.Black; 
     lblTimer.Background = Brushes.White; 
    } 
    else 
    { 
     lblTimer.Foreground = Brushes.White; 
     lblTimer.Background = Brushes.Black; 
    } 
    BlinkOn = !BlinkOn; 
} 
+0

İyi çalıştı, Titreşim öğelerini +1 reddetmek için opts kullanılırken Visibility.Collapsed ile titremesi için opaklığı kullanıyorum – BENN1TH