2012-04-10 2 views
4

Дано: Control (x: Name = "border1") с VisualStateManager. Элемент управления RenderTransform установлен в TransformGroup, который содержит TranslateTransform.Анимация TranslateTransform.Y до высоты элемента управления (цель состоит в том, чтобы сдвинуть элемент с прицела)

В VisualState «не показаны», TranslateTransform сек Y свойство должно быть оживлены к Value, который (по крайней мере) высота элемента управления переводится (фактически делает его невидимым - ClipToBounds истинна).

Это код создает смесь:

<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> 

РЕДАКТИРОВАТЬ (2): {Binding ActualHeight, ElementName=border1} не работает. При запуске из VS вместо Blend, есть намек:

Не могу найти руководящие FrameworkElement или FrameworkContentElement для целевых элемента. BindingExpression: Path = ActualHeight; DataItem = NULL; Целевой элемент - «EasingDoubleKeyFrame» (HashCode = 57957548); target property is 'Value' (type 'Double')

Как правильно настроить вещи для этой анимации?

+0

Изменил часть со спекуляцией о том, что может пойти не так ... включая вывод VS, о котором я раньше не знал. – user1282998

+0

Обновление: Made EasingDoubleKeyFrame - ресурс border1. Теперь по крайней мере обязательные работы. Еще впереди ... – user1282998

+0

... и работает по назначению. Могу ли я обвинить Blend в создании этого кода? – user1282998

ответ

0
  1. Вы в ControlTemplate, так что вы должны использовать TemplateBinding вместо Binding.
  2. Binding/TemplateBinding только "работает" на FrameworkElement (EasingDoubleKeyFrame является DependencyObject, не FrameworkElement). Поэтому вам нужно сделать свою анимацию в коде.