2012-01-06 9 views
0

Expressionブレンドを使用してオブジェクトの境界線の色をアニメーション化しようとしています。ブラシリソースを使用してExpression Blendでオブジェクトの境界線をアニメートできない

ストーリーボード内のボーダーの値を、以前作成したブラシリソースのボーダーの値に変更するたびに、オブジェクトのベースの境界線がアニメーション化される代わりに変更されます。プロパティの値を基本値の値に変更すると(つまり、ブラシリソースは使用しません)、アニメーションは意図したとおりに動作します。

ブラシリソースを使用してカラープロパティをアニメーション化できませんか?

<Style x:Key="StandardTextBoxStyle" BasedOn="{x:Null}" TargetType="{x:Type TextBox}"> 
    (...) 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TextBox}"> 
       <Grid x:Name="grid"> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
         (...) 
         </VisualStateGroup> 
         <VisualStateGroup x:Name="FocusStates"> 
          <VisualStateGroup.Transitions> 
           <VisualTransition GeneratedDuration="0" To="Focused"> 
            <Storyboard> 
             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" Storyboard.TargetName="rectangle"> 
              <EasingColorKeyFrame KeyTime="0" Value="#FFC2C2C2"/> 
              <EasingColorKeyFrame KeyTime="0:0:0.2" Value="#FF5FA5C9"/> 
             </ColorAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualTransition> 
          </VisualStateGroup.Transitions> 
          <VisualState x:Name="Unfocused"/> 
          <VisualState x:Name="Focused"/> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        (...) 
</Style> 

どのようにすることができます:ここで

はボーダーのためのハードコードされた色の値を使用するときにExpression Blendのによって生成されたコード(このコードは動作しますが、アニメーションが適切に果たしているが、国境の値がハードコードされて)がありますハードコードされた値#FF5FA5C9をローカルブラシリソースの値に置き換えますか? Value = "#FF5FA5C9"ステートメントをDynamicResource/StaticResourceステートメントに置き換えるだけでいいですか?

+0

いくつかのコードを共有できますか? – Divya

答えて

2

ブラシリソースにアニメーション化しようとするのではなく、別のコピーを作成してRectangle_Focusedのような名前を付けることをお勧めします。矩形。

このシェイプにボーダーブラシリソースを追加し、シェイプ表示を折りたたみに設定します。次に、フォーカスされた状態、またはマウスオーバー状態、または好きなところで、可視性を可視に戻します。のような種類。

<VisualState x:Name="Focused"> 
            <Storyboard> 
             <DoubleAnimation Duration="0:0:0.1" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="FocusVisualElement" d:IsOptimized="True"/> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="MouseOverBorder" d:IsOptimized="True"/> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Background_Copy"> 
              <DiscreteObjectKeyFrame KeyTime="0"> 
               <DiscreteObjectKeyFrame.Value> 
                <Visibility>Visible</Visibility> 
               </DiscreteObjectKeyFrame.Value> 
              </DiscreteObjectKeyFrame> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 

いけない理由を私に尋ねるが、同じオブジェクトにブラシリソースにアニメーション化することは、単にdoesntがそれをカットしますが、あなたはこのようなものの探していると同じ効果を達成することができます。

+0

Chrisさん、ありがとうございました。 ColorリソースにBrushリソースを使用する利点はありますか? (私の答えを見てください)。確かに、ブラシリソースを使用してアニメートできないのはちょっと変わったことです... –

+1

ブラシリソースを使用すると、線状や放射状のグラデーションなどの視覚効果を向上させることができます。だからあなたのデザインに応じて多くのケースでは、はるかにあなたのブラシリソースへのアクセスを持っていることははるかに便利です。 –

+0

感謝します、もう一度ありがとう:) –

1

私はこの問題を発見したと信じています。いくつかの理由から

、ローカルブラシリソースのようなストロークの値を代入すると、アニメーションのストーリーボードにキーフレームを作成しません:

は、ここであなたがすべきではないものだ。

http://i.imgur.com/5X7Xm.jpg

代わりにカラーローカルリソースを作成し、次のように割り当てなければなりません。

http://i.imgur.com/UGIOl.jpg

ストーリーボードのキーフレームが正しく作成され、アニメーションが機能します。

Expression Blendのバグは多分ですか?これはすべきだと思いますか?いいえアイデア:)

+0

これは別の形状をオーバーブレンドするよりも優れた解決策です。EBがすぐに "ブラシキーフレーム"をサポートすることを期待してくれてありがとうございます。 – kneo

関連する問題