2013-12-03 2 views
1

У меня есть серия триггеров для управления баром, который должен двигаться вверх и вниз. Каждый раз, когда она дается один из этих произвольно выбранных значений, он скользит в соответствующее положение:анимация только в одном направлении

<Trigger Property="Content" Value="B000"> 
    <Trigger.EnterActions> 
     <BeginStoryboard Name="B000" HandoffBehavior="SnapshotAndReplace"> 
      <Storyboard FillBehavior="HoldEnd" Duration="0:0:1"> 
       <DoubleAnimation Storyboard.TargetName="bar1" Storyboard.TargetProperty="Offset" To="0" Duration="0:0:1" BeginTime="0:0:0" /> 
       <DoubleAnimation Storyboard.TargetName="bar2" Storyboard.TargetProperty="Offset" To="0" Duration="0:0:1" BeginTime="0:0:0" /> 
      </Storyboard> 
     </BeginStoryboard> 
    </Trigger.EnterActions> 
</Trigger> 
<Trigger Property="Content" Value="B125"> 
    <Trigger.EnterActions> 
     <BeginStoryboard Name="B125" HandoffBehavior="SnapshotAndReplace"> 
      <Storyboard FillBehavior="HoldEnd" Duration="0:0:1"> 
       <DoubleAnimation Storyboard.TargetName="bar1" Storyboard.TargetProperty="Offset" To=".125" Duration="0:0:1" BeginTime="0:0:0" /> 
       <DoubleAnimation Storyboard.TargetName="bar2" Storyboard.TargetProperty="Offset" To=".125" Duration="0:0:1" BeginTime="0:0:0" /> 
      </Storyboard> 
     </BeginStoryboard> 
    </Trigger.EnterActions> 
</Trigger> 
<Trigger Property="Content" Value="B250"> 
    <Trigger.EnterActions> 
     <BeginStoryboard Name="B250" HandoffBehavior="SnapshotAndReplace"> 
      <Storyboard FillBehavior="HoldEnd" Duration="0:0:1"> 
       <DoubleAnimation Storyboard.TargetName="bar1" Storyboard.TargetProperty="Offset" To=".25" Duration="0:0:1" BeginTime="0:0:0" /> 
       <DoubleAnimation Storyboard.TargetName="bar2" Storyboard.TargetProperty="Offset" To=".25" Duration="0:0:1" BeginTime="0:0:0" /> 
      </Storyboard> 
     </BeginStoryboard> 
    </Trigger.EnterActions> 
</Trigger> 
<Trigger Property="Content" Value="B500"> 
    <Trigger.EnterActions> 
     <BeginStoryboard Name="B500" HandoffBehavior="SnapshotAndReplace"> 
      <Storyboard FillBehavior="HoldEnd" Duration="0:0:1"> 
       <DoubleAnimation Storyboard.TargetName="bar1" Storyboard.TargetProperty="Offset" To=".5" Duration="0:0:1" BeginTime="0:0:0" /> 
       <DoubleAnimation Storyboard.TargetName="bar2" Storyboard.TargetProperty="Offset" To=".5" Duration="0:0:1" BeginTime="0:0:0" /> 
      </Storyboard> 
     </BeginStoryboard> 
    </Trigger.EnterActions> 
</Trigger> 
<Trigger Property="Content" Value="B750"> 
    <Trigger.EnterActions> 
     <BeginStoryboard Name="B750" HandoffBehavior="SnapshotAndReplace"> 
      <Storyboard FillBehavior="HoldEnd" Duration="0:0:1"> 
       <DoubleAnimation Storyboard.TargetName="bar1" Storyboard.TargetProperty="Offset" To=".75" Duration="0:0:1" BeginTime="0:0:0" /> 
       <DoubleAnimation Storyboard.TargetName="bar2" Storyboard.TargetProperty="Offset" To=".75" Duration="0:0:1" BeginTime="0:0:0" /> 
      </Storyboard> 
     </BeginStoryboard> 
    </Trigger.EnterActions> 
</Trigger> 
<Trigger Property="Content" Value="B1k0"> 
    <Trigger.EnterActions> 
     <BeginStoryboard Name="B1k0" HandoffBehavior="SnapshotAndReplace"> 
      <Storyboard FillBehavior="HoldEnd" Duration="0:0:1"> 
       <DoubleAnimation Storyboard.TargetName="bar1" Storyboard.TargetProperty="Offset" To="1" Duration="0:0:1" BeginTime="0:0:0" /> 
       <DoubleAnimation Storyboard.TargetName="bar2" Storyboard.TargetProperty="Offset" To="1" Duration="0:0:1" BeginTime="0:0:0" /> 
      </Storyboard> 
     </BeginStoryboard> 
    </Trigger.EnterActions> 
</Trigger> 

Но по какой-то причине, это только когда-либо перемещается вверх. Части, где он должен снова двигаться вниз, он просто сидит там. Остановка анимации между изменениями только заставляет ее начинать со дна, и это не то, что я хочу.

+0

Вы можете попробовать * не указывая * 'HandoffBehavior' и' FillBehavior' для всех ваших анимаций. –

+0

Так было, прежде чем я добавил этих двух. И они тоже были в каждой комбинации. – Patrick

+0

Попробуйте назначить триггеры сверху вниз. Если проблема не исчезнет или она не будет запускать триггер второй раз. – Paparazzi

ответ

0

Я не уверен, что вы имеете в виду при спуске LOL, но каждая анимация/триггер имеет EnterAction и ExitAction.

Для меня это похоже на то, что вы ищете ExitAction, который позволит вам переместить эту штуку обратно в исходное положение. :)

Посмотрите на эту ссылку:

http://msdn.microsoft.com/en-us/library/system.windows.triggerbase.exitactions%28v=vs.110%29.aspx

Вот пример:

<Style x:Key="PropertyTriggerExampleButtonStyle" TargetType="{x:Type Button}"> 

    <Setter Property="Opacity" Value="0.25" /> 

    <Style.Triggers> 
    <Trigger Property="IsMouseOver" Value="True"> 

     <Trigger.EnterActions> 
     <BeginStoryboard> 
      <Storyboard> 
      <DoubleAnimation Storyboard.TargetProperty="Opacity" 
       To="1" Duration="0:0:1" /> 
      </Storyboard> 
     </BeginStoryboard> 
     </Trigger.EnterActions> 
     <Trigger.ExitActions> 
     <BeginStoryboard> 
      <Storyboard> 
      <DoubleAnimation Storyboard.TargetProperty="Opacity" 
       To="0.25" Duration="0:0:1" /> 
      </Storyboard> 
     </BeginStoryboard> 
     </Trigger.ExitActions>   
    </Trigger>    
    </Style.Triggers>  
</Style> 

Edit:

Тогда вам нужно иметь несколько DoubleAnimations как это:

 <BeginStoryboard> 
      <Storyboard> 
      <DoubleAnimation .... /> 
      <DoubleAnimation ... /> 
      <DoubleAnimation ... /> 
      <DoubleAnimation ... /> 
      </Storyboard> 
     </BeginStoryboard> 
+0

Нет, он не должен возвращаться в исходное положение. Предполагается, что следующий триггер переместит его в новое положение (выше или ниже), с которого закончилась предыдущая. – Patrick

+0

Взгляните на мое редактирование. Вам не нужны триггеры, в которых вам нужны только анимации. Они будут исполняться один за другим. –

+0

О, эй, оказывается, я могу положить гнезда самих раскадровки. Я могу случайным образом генерировать последовательности из StaticResource и вместо этого устанавливать их. – Patrick

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