2011-09-14 7 views
2

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

<Style x:Key="PropertyTriggerExampleButtonStyle" TargetType="{x:Type Button}">   
     <Setter Property="Width" Value="200" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding para}" Value="0"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetProperty="Width" 
       To="500" Duration="0:0:1" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions>     
      </DataTrigger> 
      <DataTrigger Binding="{Binding para}" Value="1"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetProperty="Width" 
       To="200" Duration="0:0:1" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions>     
      </DataTrigger>    
     </Style.Triggers> 
    </Style> 
<Button Style="{StaticResource PropertyTriggerExampleButtonStyle}"> 
     button width will be changed 
    </Button> 

пара является переменной (уже реализовать INotifyPropertyChanged интерфейс), который будет управление с помощью другой кнопки. его значение равно 0 или 1.

Но когда я нажимаю кнопку, чтобы изменить значение пара, раскадровка запускает только один раз для каждого значения (0 и 1). Это никогда не будет срабатывать позже.

Если я поместил второй раскадровки в тег ExitActions первого триггера данных. он будет работать хорошо. Но у меня есть более чем 2 раскадровки нужно контролировать ......

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

<Style.Triggers> 
      <DataTrigger Binding="{Binding para}" Value="0"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetProperty="Width" To="500" Duration="0:0:1" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions>  
       <DataTrigger.ExitActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetProperty="Width" To="200" Duration="0:0:1" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.ExitActions> 
      </DataTrigger>      
     </Style.Triggers> 

ответ

2

Вы можете использовать System.Windows.Interaction.Interactivity с условием запуска раскадровки.

XMLNS: I = "http://schemas.microsoft.com/expression/2010/interactivity" XMLNS: е = "http://schemas.microsoft.com/expression/2010/interactions"

<Border x:Name="brd" MinWidth="20" Height="20"> 
<TextBlock Text="{Binding Text}" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
<Border.Resources> 
    <Storyboard x:Key="Story" Duration="1000" 
      Storyboard.TargetName="brd" 
      Storyboard.TargetProperty="Background"> 
     <ObjectAnimationUsingKeyFrames> 
      <DiscreteObjectKeyFrame KeyTime="0:0:0.0" Value="#81bb8c" /> 
      <DiscreteObjectKeyFrame KeyTime="0:0:0.9" Value="{x:Null}" /> 
     </ObjectAnimationUsingKeyFrames> 
    </Storyboard> 
    <Storyboard x:Key="Story2" Duration="1000" 
      Storyboard.TargetName="brd" 
      Storyboard.TargetProperty="Background"> 
     <ObjectAnimationUsingKeyFrames> 
      <DiscreteObjectKeyFrame KeyTime="0:0:0.0" Value="#bb818c" /> 
      <DiscreteObjectKeyFrame KeyTime="0:0:0.9" Value="{x:Null}" /> 
     </ObjectAnimationUsingKeyFrames> 
    </Storyboard> 
</Border.Resources> 
<i:Interaction.Triggers> 
    <ei:DataTrigger Binding="{Binding LastClick}" Value="0" 
      Comparison="GreaterThan"> 
     <ei:ControlStoryboardAction 
      Storyboard="{StaticResource Story}" ControlStoryboardOption="Play" /> 
    </ei:DataTrigger> 
    <ei:DataTrigger Binding="{Binding LastClick}" Value="0" 
      Comparison="LessThan"> 
     <ei:ControlStoryboardAction 
      Storyboard="{StaticResource Story2}" ControlStoryboardOption="Play" /> 
    </ei:DataTrigger> 
</i:Interaction.Triggers></Border> 
+0

Я использую свой метод. Он работает хорошо. Спасибо вам большое. Но почему старый способ не работает? я очень озадачен ..... –

+0

Существует соревнование между триггерами. Вот пример WPF с наложенным StoryBoard. [link] (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/ffeb5b40-e5c1-4ba1-bb95-b3d2a7ff0d2b/) – Radik

+0

Благодарим вас за полезный ответ. –

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