2016-05-26 3 views
0

У меня есть style trigger на моих кнопках IsEnabled свойство, которое срабатывает и шевелит мои кнопки, когда установлено значение True. Это отлично работает, если я отключу, а затем снова включите кнопку из кода (MVVM) после загрузки и запуска приложения. Тем не менее, trigger не срабатывает при начальной загрузке. Таким образом, все мои кнопки, которые включены по умолчанию, не покачиваются. Что я могу сделать, чтобы заставить триггер работать при загрузке?WPF Style Property Trigger не срабатывает при загрузке

Вот мой Style из моего App.xaml

<Setter Property="RenderTransformOrigin" Value="0.5,0" /> 
    <Setter Property="RenderTransform"> 
     <Setter.Value> 
      <RotateTransform /> 
     </Setter.Value> 
    </Setter> 
    <Style TargetType="{x:Type Button}" x:Key="btnDefaultStyle"> 
     <Style.Triggers> 
      <Trigger Property="IsEnabled" Value="True"> 
       <Trigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard TargetProperty="RenderTransform.Angle" RepeatBehavior="Forever"> 
          <DoubleAnimation From="0" To="-5" BeginTime="0:0:0:5.00" Duration="0:0:0.05"/> 
          <DoubleAnimation From="-5" To="0" BeginTime="0:0:0:5.05" Duration="0:0:0.05"/> 
          <DoubleAnimation From="0" To="4" BeginTime="0:0:0:5.10" Duration="0:0:0.05"/> 
          <DoubleAnimation From="4" To="0" BeginTime="0:0:0:5.15" Duration="0:0:0.05"/> 
          <DoubleAnimation From="0" To="-3" BeginTime="0:0:0:5.20" Duration="0:0:0.05"/> 
          <DoubleAnimation From="-3" To="0" BeginTime="0:0:0:5.25" Duration="0:0:0.05"/> 
          <DoubleAnimation From="0" To="2" BeginTime="0:0:0:5.30" Duration="0:0:0.05"/> 
          <DoubleAnimation From="2" To="0" BeginTime="0:0:0:5.35" Duration="0:0:0.05"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </Trigger.EnterActions> 
       <Trigger.ExitActions> 
        <BeginStoryboard> 
         <Storyboard TargetProperty="RenderTransform.Angle"> 
          <DoubleAnimation From="0" To="0" BeginTime="0:0:0:0" Duration="0:0:0.0"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </Trigger.ExitActions> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource btnDefaultStyle}" /> 

EventTriggers RoutedEvent, т.е. RoutedEvent="Window.Loaded" бесполезно, поскольку оно отменяет событие Property IsEnable, и поэтому мои отключенные кнопки также покачиваются.

+0

Должны ли они показываться неограниченно, или просто на короткое мгновение после загрузки формы? – Logan

+0

Бессрочно. Каждые 5 секунд. Но только если включено. –

ответ

1

Использование DataTrigger, как показано ниже:

 <DataTrigger Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="True"> 
      <DataTrigger.EnterActions> 
       <BeginStoryboard> 
         ... 
       </BeginStoryboard> 
      </DataTrigger.EnterActions> 
      ... 
     </DataTrigger> 
     <DataTrigger Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="False"> 
      ... 
     </DataTrigger> 

Это работает во время загрузки тоже.

+0

Если я использую EventTriger, I.e. RoutedEvent = «Window.Loaded», он меняет мои кнопки независимо от свойства IsEnabled. Так что ничего хорошего. –

+0

@IanGM, пожалуйста, проверьте обновленный ответ – AnjumSKhan

+0

Привет @AnjumSKhan, спасибо. Я только что попробовал вам пример, и теперь ничего не происходит. Тем не менее, все выглядит идеально и, как будто это должно сработать. Он работает нормально без ошибок. Странный. Но спасибо. –

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