2011-12-14 3 views
3

У меня есть два DataTriggers, привязанные к свойству (Side), но можно запустить только один раскадровки (тот, который был последним DataTriggers).Несколько DataTriggers - Overlay раскадровки

Почему?

Я чувствую себя последнюю раскадровку переопределить первый один

<Border x:Name="layout" Background="Transparent" BorderBrush="#BAC8CE" BorderThickness="1" CornerRadius="5"> 
    <Border.Style> 
    <Style TargetType="{x:Type Border}"> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding Side}" Value="Up"> 
      <DataTrigger.EnterActions> 
      <BeginStoryboard> 
       <Storyboard> 
       <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
           Duration="00:00:01" 
           From="Transparent" 
           To="Green"/> 
       <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
           Duration="00:00:00.5" 
           From="Green" 
           To="Transparent"/> 
       </Storyboard> 
      </BeginStoryboard> 
      </DataTrigger.EnterActions> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Side}" Value="Down"> 
      <DataTrigger.EnterActions> 
      <BeginStoryboard> 
       <Storyboard> 
       <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
           Duration="00:00:01" 
           From="Transparent" 
           To="Red"/> 
       <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
           Duration="00:00:00.5" 
           From="Red" 
           To="Transparent"/> 
       </Storyboard> 
      </BeginStoryboard> 
      </DataTrigger.EnterActions> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </Border.Style> 
</Border> 

ответ

5

Я бы предложил остановить раскадровки до другой проходит:

<Border x:Name="layout" Background="Transparent" BorderBrush="#BAC8CE" BorderThickness="1" CornerRadius="5"> 
    <Border.Style> 
     <Style TargetType="{x:Type Border}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Side}" Value="Up"> 
        <DataTrigger.EnterActions> 
         <StopStoryboard BeginStoryboardName="BeginStoryboardTwo" /> 
         <BeginStoryboard x:Name="BeginStoryboardOne"> 
          <Storyboard> 
           <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
               Duration="00:00:01" 
               From="Transparent" 
               To="Green"/> 
           <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
               Duration="00:00:00.5" 
               From="Green" 
               To="Transparent"/> 
          </Storyboard> 
         </BeginStoryboard> 
        </DataTrigger.EnterActions> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding Side}" Value="Down"> 
        <DataTrigger.EnterActions> 
         <StopStoryboard BeginStoryboardName="BeginStoryboardOne" /> 
         <BeginStoryboard x:Name="BeginStoryboardTwo" > 
          <Storyboard> 
           <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
               Duration="00:00:01" 
               From="Transparent" 
               To="Red"/> 
           <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
               Duration="00:00:00.5" 
               From="Red" 
               To="Transparent"/> 
          </Storyboard> 
         </BeginStoryboard> 
        </DataTrigger.EnterActions> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Border.Style> 
    <TextBlock Text="Hello World!" /> 
</Border> 
+0

Вы были правы. Моя раскадровка никогда не останавливалась. Таким образом, другая раскадровка не имела визуального эффекта. Спасибо –

+0

@StevenMuhr, FRuffell: этот ответ правильный, но мой тоже ;-) – punker76

1

попробовать следующее решение, поместите ваш второй DataTrigger ввести действие при первом действии выходного сигнала datatrigger

<Border x:Name="layout" 
     Grid.Row="1" 
     Background="Transparent" 
     BorderBrush="#BAC8CE" 
     BorderThickness="1" 
     CornerRadius="5"> 
    <Border.Style> 
    <Style TargetType="{x:Type Border}"> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding Side, ElementName=uc, Mode=OneWay}" 
         Value="Up"> 
      <DataTrigger.EnterActions> 
      <BeginStoryboard> 
       <Storyboard> 
       <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
           Duration="00:00:05" 
           From="Transparent" 
           To="Green" /> 
       <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
           Duration="00:00:00.5" 
           From="Green" 
           To="Transparent" /> 
       </Storyboard> 
      </BeginStoryboard> 
      </DataTrigger.EnterActions> 
      <DataTrigger.ExitActions> 
      <BeginStoryboard> 
       <Storyboard> 
       <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
           Duration="00:00:05" 
           From="Transparent" 
           To="Red" /> 
       <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
           Duration="00:00:00.5" 
           From="Red" 
           To="Transparent" /> 
       </Storyboard> 
      </BeginStoryboard> 
      </DataTrigger.ExitActions> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </Border.Style> 
</Border> 

надеюсь, что это поможет

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