2013-08-15 6 views
0

Я хочу реализовать «слепую» анимацию. Это происходит следующим образом,Как узнать возможную высоту свернутого элемента в C#/XAML?

  1. Начинайте с элементом Visibility = Visibility.Collapsed с Height = 0
  2. Установите элемент Visibility = Visibility.Visible
  3. Animate Height от 0 до конечной высоты

Однако анимация определена в XAML через Blend, требует конечная высота должна быть известна заранее. В C# конечная высота может быть установлена ​​программно, но я не знаю, как получить конечную высоту, когда она находится в состоянии Collapsed.

Как я буду программировать этот эффект?

Я использую Windows Phone 7.

+0

В этом случае скрытой должна быть видимость. –

+0

Что значит? Есть два состояния для «видимости» в Silverlight, «Visible» и «Collapsed» ... – Brendan

ответ

1

Вам не нужно знать, что высота. Для подобных задач у MS уже есть функция, называемая «компоновкой жидкости».

Посмотрите здесь:

enter image description here

Зеленый флажок переключает то, что называется "Fluid раскладка". Вы должны включить его. Розовое поле - это продолжительность перехода по умолчанию. Вы должны установить его на разумную величину.

После того, как вы это сделаете, вы можете запустить свой элемент с помощью Visibility.Collapsed и оставить анимированную высоту - визуальный менеджер состояний создаст приятный переход для вас. Если вы проверите желтую кнопку, вы будете просматривать переводы в Blend, когда будете нажимать на разные состояния.

More info in this presentation, воспроизведите его с 00:04:00.

+0

Это потрясающе, я, вероятно, буду использовать эту технику для этого особого эффекта слепого. Но скажите, что моя анимация является частью StoryBoard с множеством других анимаций, которые нужно запускать в определенное время - мне все равно нужна высота? – Brendan

0

ОК, вот еще один способ, как оживить высоту от 0 до 100%.

Предупреждение: непроверенный код ниже - компиляция из другого ответа SO.

В вашем элементе (здесь я предполагаю, что это панель стека):

<StackPanel x:Name="myTransformPanel"> 
     <StackPanel.RenderTransform> 
      <ScaleTransform></ScaleTransform> 
     </StackPanel.RenderTransform> 
</Stackanel> 

В анимации:

<Storyboard x:Name="myStoryboard"> 
    <DoubleAnimation 
     Storyboard.TargetName="myTransformPanel" 
     Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)" 
     From="0" To="1" Duration="0:0:1" /> 
</Storyboard>