2013-04-04 1 views
6

私は自分のViewModelプロパティの1つに基づいて表示するだけのラベルを持っています。アニメーションを使用してWPFラベル(またはその他の要素)をフラッシュする

<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> 

私はこれが最善の方法ですが、いずれにしても、私はまた、ラベルが点滅したいのですがわからない:ここではXAMLです。明らかに、私はそれが見えるときに点滅したいだけです。誰かが私にいくつかのサンプルコードを教えてもらえますか、これを行うための簡単な例を書くことができますか?私は何らかのトリガーとアニメーションが必要だと思う。おそらく私はアニメーションを停止するようにラベルが見えなくなったときにトリガーも必要ですか?ありがとうございます。 Dave P.S.これらのWPFのすべてのトリックの良い本やサイトはありますか?その本を覚えている人のための "MFC Answer Book"のようなもの。

+0

ハ - オプション取引システム? :)あなたはストーリーボードのアニメーションに精通していますか?要素のOpacityプロパティをアニメーション化することで、後の動作を得ることができます。もし私がチャンスを得るなら、私は例を挙げます。 – JerKimball

答えて

22

StoryboardアニメーションをStyle.Resourcesに追加し、DataTriggerEnterActionsセクションで開始することができます。

Opacity上の簡単なDoubleAnimationはこのような細かい

何か動作するはずです:

<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

素晴らしい!プロパティ(OptionInMoney)がfalseに戻ったときにアニメーションを停止するように手配する必要がありますか、それが自動的に起こります。私。 DataTrigger.ExitActionsが必要ですか?その場合、どうすれば設定できますか?私はアニメーションの他のポストでの議論が目に見えなくても永遠に続いているのを見たので、それについて言及します。再度、感謝します。 – Dave

+0

はい、 'ExitActions'でアニメーションを止めることをお勧めします。私は' StopStoryboard' –

+0

Perfectで答えを更新しました。再度、感謝します。 – Dave

0

お試しthis postこれは「Blinking TextBlock」と呼ばれていますが、簡単にTextBoxのラベルを交換することができます。

+0

リンクのみの回答は避けてください。彼らはリンク腐敗に敏感です。 – ANeves

2

をストーリーボードは確かにWPFの方法ですが、それはまた、簡単なコードで実現することができます。ここでは、ラベルの背景を点滅させるために、行く:

lblTimerは、いくつかのテキストを使用して、フォーム上のルベルで、この可視性として、任意のプロパティに適用することができ

を「私が点滅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

うまくいきました。私は不透明度を使用してVisibility.Collapseでフリッカーします。フリッカー要素を消すためにoptsを使用すると+1します。 – BENN1TH

関連する問題