RotateButton.axaml代码
<Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Width="300" Height="300" x:Class="AvaloniaUI.RotateButton" Title="RotateButton"> <Window.Styles> <!-- 针对所有 Button 的基础样式 --> <Style Selector="Button"> <Setter Property="HorizontalAlignment" Value="Center"/> <Setter Property="RenderTransformOrigin" Value="50%,50%"/> <Setter Property="Padding" Value="20,15"/> <Setter Property="Margin" Value="2"/> <Setter Property="RenderTransform"> <Setter.Value> <RotateTransform Angle="0"/> </Setter.Value> </Setter> <Style Selector="^:pointerover"> <Style.Animations> <Animation Duration="0:0:2" IterationCount="INFINITE" FillMode="None"> <KeyFrame Cue="0%"> <Setter Property="RotateTransform.Angle" Value="0"/> </KeyFrame> <KeyFrame Cue="100%"> <Setter Property="RotateTransform.Angle" Value="360"/> </KeyFrame> </Animation> </Style.Animations> </Style> <Style Selector="^:not(:pointerover)"> <Style.Animations> <Animation Duration="0:0:0.18" FillMode="Forward"> <KeyFrame Cue="100%"> <Setter Property="RotateTransform.Angle" Value="0"/> </KeyFrame> </Animation> </Style.Animations> </Style> </Style> </Window.Styles> <StackPanel Margin="5" Button.Click="cmd_Clicked"> <Button>One</Button> <Button>Two</Button> <Button>Three</Button> <Button>Four</Button> <TextBlock Name="lbl" Margin="5"/> </StackPanel> </Window>
RotateButton.axaml.cs代码
using Avalonia; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; using Shares.Avalonia; namespace AvaloniaUI; public partial class RotateButton : Window { public RotateButton() { InitializeComponent(); } private void cmd_Clicked(object? sender, RoutedEventArgs e) { lbl.Text = "You clicked: " + ((Button)e.Source!).Content; } }
运行效果