[WPF] TextBlockの値変更時に点滅させる
TextBlockのTextを変更したときに、文字全体を点滅させます。
TextBlockにはTextChangedイベントがありません。
代わりに、Binding.TargetUpdatedイベントを使用することで同じような動きにできます。
ただし、このイベントは通常は発生しません。
発生させるためには、TextにBindするときにオプション指定が必要です。
Text="{Binding Message,NotifyOnTargetUpdated=True}"
こうすることで、バインドされた値が変更されたときに、TargetUpdatedイベントが発生します
あとはこのイベントが発生したときに、点滅させるアニメーションを実行すればOKです。
スタイルで定義しました
<!-- 点滅アニメーション --> <Storyboard x:Key="BlinkStory"> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" RepeatBehavior="3x" AutoReverse="True"> <LinearDoubleKeyFrame KeyTime="0" Value="1" /> <LinearDoubleKeyFrame KeyTime="0:0:0.5" Value="0" /> </DoubleAnimationUsingKeyFrames> </Storyboard> <!-- 値が変更されたときに点滅するスタイル --> <Style TargetType="TextBlock" x:Key="BlinkStyle"> <Style.Triggers> <EventTrigger RoutedEvent="Binding.TargetUpdated"> <BeginStoryboard Storyboard="{StaticResource BlinkStory}"/> </EventTrigger> </Style.Triggers> </Style>
UI定義
<TextBlock Text="{Binding Message,NotifyOnTargetUpdated=True}" Background="Pink" Style="{StaticResource BlinkStyle}"/>
Messageプロパティを変更すると点滅します
この例では、LinearDoubleKeyFrameを使用して、なめらかに点滅させています。
代わりに、DiscreteDoubleKeyFrameを指定すると、ON/OFFのようにチラチラと点滅します。
RepeatBehaviorに繰り返し回数を指定します。
RepeatBehavior=”Forever”にすれば永遠に点滅します。
KeyTimeを調整することで点滅する間隔を変更できます。
プログラムコードを全く書かなくても実装できてしまいます。
慣れればとっても簡単です
== ランキングに参加しています。ぜひクリックお願いします ==
[WPF] XAMLデザイナーがやたらエラーを出力するとき Excel2016 『テキストに合わせて図形のサイズを調整する』がつかえない