ToggleButton ControlTemplate使用动画或不使用动画
问题描述:
在这个动画ToggleButton
ControlTemplate
,当它点击它时,它的动画旋转Path
当IsChecked
改变。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>
这个伟大的三江源,我刚才一直在看事件触发,你碰巧知道是否有可能点击事件触发器与属性触发器结合? – Hank
我自己从来没有这样做过,但有人发布了另一个问题的答案,可以帮助你: https://stackoverflow.com/a/24012104/7523101 –
好的发现,完全忘记了这种方式 – Hank