0

次の簡単なアニメーションがあります。

<Window x:Class="AnimationTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel Background="Black">
        <TextBox Name="Box" >

        </TextBox>
        <TextBlock Text="{Binding Text, ElementName=Box, NotifyOnTargetUpdated=True}"  Foreground="White" >
            <TextBlock.Style>
                <Style TargetType="TextBlock"  >
                    <Style.Triggers>
                        <EventTrigger RoutedEvent="Binding.TargetUpdated">
                            <BeginStoryboard>
                                <Storyboard>
                                    <ColorAnimation AutoReverse="True" To="#A933FF" Duration="0:0:1" Storyboard.TargetProperty="Foreground.Color" FillBehavior="Stop" IsCumulative="True" />
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
        </TextBlock>
    </StackPanel>
</Window>

値が変更されたときにフラッシュを値にするだけです。文字を書くと、アニメーションで設定された色に正しく点滅し、元に戻ります。ただし、数回クリックすると、持続時間が長くなりますが (これは望ましい動作です)、フェードアウトせずに元の色になります。なぜこれが起こり、どのように回避するのですか?

4

2 に答える 2

2

繰り返しになりますが、ユーザーが何らかのコードを提供し、なぜこれが起こっているのかという質問があります。この場合の答えは、これらの質問に対する通常の答えです。

あなたはそれを実現するためにいくつかのコードを書きました

もう少し深く掘り下げるために、あなたは次のように尋ねました:

文字を書くと、アニメーションで設定された色に正しく点滅し、元に戻ります。ただし、数回クリックすると、持続時間が長くなりますが (これは望ましい動作です)、フェードアウトせずに元の色になります。なぜこれが起こり、どのように回避するのですか?

まず、なぜこれが起こるのですか?

したがって、値が設定されていないa宣言したため、この値が an によって操作されたかどうか関係なく、常に現在の値から開始されます。ColorAnimationFromAnimation

<ColorAnimation AutoReverse="True" To="#A933FF" Duration="0:0:1" FillBehavior="Stop" 
    Storyboard.TargetProperty="Foreground.Color" IsCumulative="True" />

1 文字入力すると、ColorAnimation期待どおりに が表示されます。ただし、さらに文字を続けて入力すると、設定した紫色に達し、入力を停止するまでそれ以上のアニメーションは表示されません。これは、現在、紫色から同じ紫色にアニメーション化しようとしているためです。

さて、どう回避するか。

この問題を解決するには、From色を指定するかDuration、より速くなるように設定するか、できればその両方を行います。

<ColorAnimation AutoReverse="True" From="White" To="#A933FF" Duration="0:0:0.1" 
    Storyboard.TargetProperty="Foreground.Color" FillBehavior="Stop" 
    IsCumulative="True" />
于 2014-06-20T15:23:46.100 に答える