2012-04-10 3 views
4

与えられます:VisualStateManagerのControl(x:Name = "border1")コントロールのRenderTransformは、TranslateTransformを含むTransformGroupに設定されています。 VisualStateTranslateTransform.Yをコントロールの高さにアニメーション化します(目的は視界から要素をスライドさせることです)

「は図示せず」、TranslateTransform S Yプロパティは(事実上不可視にレンダリング - trueに設定ClipToBounds)(少なくとも)コントロールの高さが翻訳されてValueにアニメーション化されるべきです。

これは、コードのブレンドが生成される:

<VisualState x:Name="NotShown"> 
    <Storyboard> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="border1"> 
      <EasingDoubleKeyFrame KeyTime="0" Value="{Binding ActualHeight, ElementName=border1}"/> 
     </DoubleAnimationUsingKeyFrames> 
    </Storyboard> 
</VisualState> 

EDITは(2):{Binding ActualHeight, ElementName=border1}はまったく動作しません。 VS代わりのブレンドから実行すると、ヒントがあります:

は ターゲット要素のためのFrameworkElementまたはFrameworkContentElementのを規制する見つけることができません。 BindingExpression:Path = ActualHeight; DataItem = null; ターゲット要素は 'EasingDoubleKeyFrame'(HashCode = 57957548)です。ターゲットは プロパティは '値'(タイプ 'Double')

このアニメーションの目的のために正しく設定するにはどうすればよいですか?

+0

私が以前に気づいていなかったVS出力を含む、間違っているかもしれないことについての推測を変更しました。 – user1282998

+0

更新:EasingDoubleKeyFrameをborder1のリソースにしました。少なくともバインディングは機能しています。もっと来る... – user1282998

+0

...と意図して動作します。 そのコードを生成するためにBlendを責めることができますか? – user1282998

答えて

0
  1. あなたはControlTemplateにありますので、Bindingの代わりにTemplateBindingを使用する必要があります。
  2. のみ
  3. Binding/TemplateBindingは(EasingDoubleKeyFrameDependencyObject、ないFrameworkElementです)FrameworkElementの "作品"。したがって、コードビハインドでアニメーションを行う必要があります。
関連する問題