4

アニメーションは便利ですが、プロパティの値をアニメーションなしで即座に変更したい場合があります。どうやら、それを行う唯一の方法は、を使用することです<Something>AnimationUsingKeyFrames:

<Storyboard>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="txtStatus" Storyboard.TargetProperty="Foreground">
        <DiscreteObjectKeyFrame KeyTime="0">
            <DiscreteObjectKeyFrame.Value>
                <SolidColorBrush Color="Red" />
            </DiscreteObjectKeyFrame.Value>
        </DiscreteObjectKeyFrame>
    </ObjectAnimationUsingKeyFrames>
</Storyboard>

構文がごちゃごちゃしている...プロパティを別の値に設定するためだけに7行のコード?!

もっと簡単な方法はありますか?

私はこのようなことをしたいと思います:

<Storyboard>
    <Setter TargetName="txtStatus" Property="Foreground" Value="Red" />
</Storyboard>

(このコードが有効でないことはわかっています。これは、私が望むものの例を示すためのものです)


Triggers編集: 明確にするために:とについては知ってDataTriggersいますが、必要なものではありません。スタイルとコントロール テンプレートでしか使用できないためです。で を使用してVisualStateManagerいるUserControlため、 を使用せざるを得ませんStoryboard

4

2 に答える 2

1

設定しているプロパティのタイプに非キーフレーム アニメーションが存在する場合 (および非キーフレーム アニメーション タイプが多数存在する場合)、Duration が 0 のアニメーションを使用できます。これには次の効果があります。セッターのように、xaml の 1 行で動作します。例えば:

<Storyboard>
    <ColorAnimation Storyboard.TargetName="txtStatus" Storyboard.TargetProperty="Foreground" Value="Red" Duration="0" />
</Storyboard>

これが機能するのは、アニメーションのデフォルトの FillBehavior が HoldEnd であるためです。

「セッター」という単語が表示されるのとまったく同じではありません。xaml をブラウジングするには、アニメーションに瞬間的なセットの効果があることを理解するために何らかの解釈が必要です。また、ストーリーボードが終了すると値は元に戻りますが、これは値を即座に変更するための法案に適合します。

于 2012-09-05T22:52:27.193 に答える
0

トリガーを設定する必要があります (おそらく、すでにストーリーボードを呼び出す必要があります。それらを埋めたりBeginStoryboardStoryboardアイテムをセッターで埋めたりするのではなく、.

<Trigger Property="<SomeProperty>" Value="<SomeValue>">
   <Setter TargetName="txtStatus" Property="Foreground" Value="Red" />
</Trigger>
于 2012-08-23T11:18:20.457 に答える