ViewModelプロパティの1つに基づいてのみ表示するラベルがあります。 XAMLは次のとおりです。
<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>
これが最善の方法かどうかはわかりませんが、いずれにせよ、ラベルを点滅させたいと思います。明らかに、私はそれが見えるときだけそれを点滅させたいです。誰かが私にいくつかのサンプルコードを教えてもらえますか、またはこれを行うための簡単な例を書くことができますか?なんらかのトリガーとアニメーションが必要だと思います。おそらく、アニメーションを停止するために、ラベルが表示されなくなったときにトリガーも必要ですか?
ありがとう、デイブP.S.これらすべてのWPFトリックに適した本やサイトはありますか?その本を覚えている人のための「MFCアンサーブック」のようなもの。
Storyboard
アニメーションをStyle.Resources
に追加し、EnterActions
のDataTrigger
セクションで開始できます。
DoubleAnimation
の単純なOpacity
は正常に機能するはずです
このようなもの:
<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>
StoryBoardは確かにWPFの方法ですが、単純なコードでも実現できます。ラベルの背景を点滅させるには、次のようにします。
lblTimerは、「IAMBLINKING」などのテキストを含むフォーム上のLebelです。
これは、VISIBILITYとして、任意のプロパティに適用できます。
// 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;
}
この投稿 を試してください。これは「BlinkingTextBlock」と呼ばれますが、TextBox
をLabel`と簡単に交換できます。