ToggleButton ControlTemplate使用动画或不使用动画

问题描述:

在这个动画ToggleButtonControlTemplate,当它点击它时,它的动画旋转PathIsChecked改变。ToggleButton ControlTemplate使用动画或不使用动画

<ControlTemplate x:Key="AnimatedExpanderButtonTemp" TargetType="{x:Type ToggleButton}"> 
    <Border x:Name="ExpanderButtonBorder" 
     Background="{TemplateBinding Background}" 
     BorderBrush="{TemplateBinding BorderBrush}" 
     BorderThickness="{TemplateBinding BorderThickness}" 
     Padding="{TemplateBinding Padding}"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
      </Grid.ColumnDefinitions> 
      <Rectangle Fill="Transparent"/> 
      <Ellipse x:Name="Circle" 
        Grid.Column="0" 
        Stroke="DarkGray" 
        Fill="White" 
        Width="15" 
        Height="15" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center"/> 
      <Path x:Name="Arrow" 
       Grid.Column="0" 
       Data="M 1,1.5 L 4.5,5 8,1.5" 
       Stroke="#FF666666" 
       StrokeThickness="2" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       RenderTransformOrigin="0.5,0.5"> 
      </Path> 
     </Grid> 
    </Border> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsChecked" Value="True"> 
      <Trigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetName="Arrow" 
             Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" 
             To="180" 
             Duration="0:0:0.4"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </Trigger.EnterActions> 
      <Trigger.ExitActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetName="Arrow" 
             Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" 
             To="0" 
             Duration="0:0:0.4"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </Trigger.ExitActions> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

但是,有些情况下我不希望动画播放。

这样当ToggleButton首次加载并且它是预先检查,
或,
如果在一个VirtualizingPanel使用它和按钮行超出范围,并配备回。

一些scenerios:
1)如果是前检查,而不是从一个点击然后直接转到旋转箭180度无动画。

2)如果点击并选中True,则旋转180度动画。

3)如果它被点击并且Checked是False,它会旋转到0动画。

我该如何做到这一点?

尝试是这样的:

<ControlTemplate.Triggers> 
    <MultiTrigger> 
     <MultiTrigger.Conditions> 
      <Condition Property="IsChecked" Value="True" /> 
      <Condition Property="IsPressed" Value="False" /> 
      <!--<Condition Property="IsMouseOver" Value="False" /> not sure if needed in your case--> 
     </MultiTrigger.Conditions> 
     <!--your logic for changing without animation--> 
     <!--<Setter Property="" Value="" />--> 
    </MultiTrigger> 

    <MultiTrigger> 
     <MultiTrigger.Conditions> 
      <Condition Property="IsChecked" Value="True" /> 
      <Condition Property="IsPressed" Value="True" /> 
      <!--<Condition Property="IsMouseOver" Value="False" /> not sure if needed in your case--> 
     </MultiTrigger.Conditions> 
     <!--your logic for changing with animation--> 
     <!--<Setter Property="" Value="" />--> 
    </MultiTrigger> 

    <MultiTrigger> 
     <MultiTrigger.Conditions> 
      <Condition Property="IsChecked" Value="False" /> 
      <Condition Property="IsPressed" Value="True" /> 
      <!--<Condition Property="IsMouseOver" Value="False" /> not sure if needed in your case--> 
     </MultiTrigger.Conditions> 
     <!--your logic for changing with animation--> 
     <!--<Setter Property="" Value="" />--> 
    </MultiTrigger> 
</ControlTemplate.Triggers> 
+0

这个伟大的三江源,我刚才一直在看事件触发,你碰巧知道是否有可能点击事件触发器与属性触发器结合? – Hank

+1

我自己从来没有这样做过,但有人发布了另一个问题的答案,可以帮助你: https://*.com/a/24012104/7523101 –

+0

好的发现,完全忘记了这种方式 – Hank