创建一个RotateBehavior类,继承System.Windows.Interactivity空间中的Behavior泛型类,前端直接调试即可
public class RotateBehavior : Behavior<CheckBox>
{
private RotateTransform rotate = null;
private Storyboard storyboard = new Storyboard();
private bool isStart = true;
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.Click += AssociatedObject_Click;
storyboard.Completed += Storyboard_Completed;
}
private void AssociatedObject_Click(object sender, RoutedEventArgs e)
{
if (isStart == false) return;
if (!(AssociatedObject.RenderTransform is RotateTransform))
{
rotate = new RotateTransform
{
CenterX = 0.5,
CenterY = 0.5,
};
AssociatedObject.RenderTransform = rotate;
}
//定义过渡动画,power为过度的强度
EasingFunctionBase easeFunction = new PowerEase()
{
EasingMode = EasingMode.EaseInOut,
Power = 5
};
double angle = ((RotateTransform)AssociatedObject.RenderTransform).Angle;
DoubleAnimation dbAscending = new DoubleAnimation(angle, angle + 180, new TimeSpan(0, 0, 0, 0, 250));
dbAscending.EasingFunction = easeFunction;
storyboard.Children.Add(dbAscending);
Storyboard.SetTarget(dbAscending, AssociatedObject);
Storyboard.SetTargetProperty(dbAscending, new PropertyPath("RenderTransform.Angle"));
storyboard.Begin();
isStart = false;
}
private void Storyboard_Completed(object sender, EventArgs e)
{
isStart = true;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.Click -= AssociatedObject_Click;
}
}
如何使用?
<CheckBox Grid.Row="0" Grid.Column="1" x:Name="checkbox" Width="35" Height="35" Style="{DynamicResource CheckBoxStyle}" RenderTransformOrigin="0.5,0.5">
<i:Interaction.Behaviors>
<behavior:RotateBehavior/>
</i:Interaction.Behaviors>
</CheckBox>
这样,点击就会出现旋转效果