1

との習慣button-styleがありColorAnimationます。

これは問題なく機能しますが、複数回繰り返し押すと、目的の色に固執します。

<Style TargetType="Button" x:Key="mainButton">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                    <ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Trigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <ColorAnimation 
                                    Duration="0:0:0.10" 
                                    Storyboard.TargetProperty="(Foreground).(SolidColorBrush.Color)" 
                                    To="Red"
                                    AutoReverse="True"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.EnterActions>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

どうすればこれを解決できますか?

4

2 に答える 2

3

アップデート

Storyboardインを削除する余裕がない場合は、中間の開始の問題に自分でTrigger.ExitActions対処する必要があります。FromStoryboard

ただし、ハードコードを指定することが唯一の解決策From ではありません。アニメーションの起動時に、アニメーションを下にある基本色にリセットすることができます。

これの利点はFrom、将来の更新で追跡することが 1 つ少なくなることを指定しないことです。

<Storyboard AutoReverse="True">

  <!-- By not specifying a To or From we pretty much reset the property to un-animated state(Exactly what the hard-coded from does) -->
  <ColorAnimation Duration="0:0:0"
                  Storyboard.TargetProperty="(Foreground).(SolidColorBrush.Color)" />

  <!-- This part is same as original time to kick into new Foreground as desired -->
  <ColorAnimation Duration="0:0:1.5"
                  Storyboard.TargetProperty="(Foreground).(SolidColorBrush.Color)"
                  To="Red" />
</Storyboard>
于 2013-07-10T10:07:28.243 に答える
1

Fromでプロパティを設定していませんColorAnimation。そのため、アニメーションの途中でボタンを押すと、ストーリーボードは現在のForeground色の値を として取得しますFrom。これは、アニメーションが元に戻る色です。

これでボタンを連打するFromと色がどんどん赤に近づき、赤に色がくっついたような印象に。


アップデート:

この答えは問題を指摘するだけです。エレガントなソリューションについては、Vivの回答を参照してください

于 2013-07-10T10:05:58.867 に答える