web-dev-qa-db-ja.com

アニメーションを使用してWPFラベル(または他の要素)をフラッシュする

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アンサーブック」のようなもの。

12
Dave

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

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

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;
}
2
NishantM

この投稿 を試してください。これは「BlinkingTextBlock」と呼ばれますが、TextBoxをLabel`と簡単に交換できます。

1
Sheridan