1

私は WPF アプリケーションを持っています。ここでは、醜いデフォルトの WPF スタイルをオーバーライドしたいと考えています。私は Styles.xaml ディクショナリを作成しました。ここではスタイルをほぼ完成させましたが、アニメーションと異なる視覚状態 (トリガー) 間のスムーズな移行にいくつかの問題があります。

私の課題の 1 つは、C# イベント ハンドラーやその他の C# コードをスタイルにバインドしたくないということでした。

ここで、トリガーにいくつかのコードを提供します。

<MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsEnabled" Value="True" />
        <Condition Property="IsMouseOver" Value="True" />
        <Condition Property="IsPressed" Value="False" />
    </MultiTrigger.Conditions>
    <MultiTrigger.EnterActions>
        <BeginStoryboard Name="MouseOverStoryboard">
            <Storyboard Duration="0:0:0.25" SlipBehavior="Grow">
                <ColorAnimation Storyboard.TargetName="InnerBorder" 
                                Storyboard.TargetProperty="Background.(SolidColorBrush.Color)" 
                                To="{StaticResource White}" 
                                BeginTime="0:0:0" Duration="0:0:0.25" />
                <DoubleAnimation Storyboard.TargetName="InnerBorder" 
                                 Storyboard.TargetProperty="Opacity" 
                                 To="0.3" 
                                 BeginTime="0:0:0" Duration="0:0:0.25" />
            </Storyboard>
        </BeginStoryboard>
    </MultiTrigger.EnterActions>
    <MultiTrigger.ExitActions>
        <RemoveStoryboard BeginStoryboardName="MouseOverStoryboard" />
    </MultiTrigger.ExitActions>
</MultiTrigger>

アニメーションをスムーズにするために、EnterAction を追加し、ここに Storyboard をタイミングで配置したので、アニメーションへの入力がスムーズで見栄えがよくなります。

私の最初の質問は、BeginStoryboard が実行されたときにデフォルトの色に戻す方法についてでしたが、RemoveStoryboard を使用できることに気付きました。

今、私は自分のアイデアが出ていることを本当に知りません-スムーズな終了アニメーションを作成するにはどうすればよいですか? RemoveStoryboard を使用すべきではありませんか?

提案を提供してください。ありがとう。

PS状態が不足しているため、VisualStateManagerを使用していません。そのための独自のコントロールを実装したくありません。

4

1 に答える 1

1

エンター アクション アニメーションの継続時間が経過したときに開始する新しいアニメーション オブジェクトを追加するのはどうでしょうか。または、を元に戻すExitActiona を追加して、Trigger のプロパティを使用する方法はどうStoryboardですかEnterActionFillbehaviorまたは、プロパティを「停止...」に設定することもできます。

別のオプションは、 を使用してlikeおよびEventSetterをキャッチすることです。RoutedEventsMouseEnterMouseLeave

于 2015-09-02T06:21:44.130 に答える