2015-06-15 2 views
2

Я следующий XAML для триггера границы, которая использует перенаправленное событиеWPF RoutedEvent раскадровка начинается только тогда, когда высота равна нуль

<Border.Triggers> 
    <EventTrigger RoutedEvent="MouseLeftButtonUp" EnterActions=""> 
     <BeginStoryboard> 
      <Storyboard> 
       <ObjectAnimationUsingKeyFrames BeginTime="0" Duration="0:0:0.4" Storyboard.Target="{Binding ElementName=messageWriterDefinition}" Storyboard.TargetProperty="Height"> 
        <DiscreteObjectKeyFrame > 
         <DiscreteObjectKeyFrame.Value> 
          <GridLength>20</GridLength> 
         </DiscreteObjectKeyFrame.Value> 
        </DiscreteObjectKeyFrame> 
        ... 
       </ObjectAnimationUsingKeyFrames> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger> 
</Border.Triggers> 

Этого триггер срабатывает, если границы и содержащие элементы щелкнули и одушевляет вызывает цель анимировать открыто с высоты нуля до 200

триггер работает очень хорошо, но каждый раз, когда граница получает событие анимации пробеги и цель снова (даже если он уже открыт) одушевляет открыт

Как можно добавить условие T o триггер, который фактически игнорирует анимацию, у цели уже есть высота, большая, чем Zero?

ответ

1

Вы можете использовать DoubleAnimation вместо ObjectAnimationUsingKeyFrames. Только установив его свойство To, но не From, анимация начинается с текущего значения свойства. Это требует, чтобы вы также установили начальное значение Height Границы:

<Border Height="20" ...> 
    <Border.Triggers> 
     <EventTrigger RoutedEvent="MouseLeftButtonUp"> 
      <BeginStoryboard> 
       <Storyboard> 
        <DoubleAnimation Storyboard.TargetProperty="Height" 
            To="200" Duration="0:0:0.4"/> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Border.Triggers> 
</Border> 
+0

Это сделало трюк, спасибо –

Смежные вопросы