You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP如何实现Button从Y坐标10到Y坐标0的位移动画效果

UWP Button控件Y轴位移动画实现方案

UWP中可以通过DoubleAnimation搭配TranslateTransform实现按钮的Y轴位移动画,内置的EasingFunction可直接支持三种缓动效果,以下是两种常用实现方式:

方法1:XAML声明式实现(适合固定触发场景)

先在XAML中定义动画和目标按钮:

<Page.Resources>
    <!-- 缓入缓出版本动画 -->
    <Storyboard x:Name="MoveEaseInOutAnim">
        <DoubleAnimation 
            Storyboard.TargetName="TargetBtn"
            Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.Y)"
            From="10" To="0" Duration="0:0:0.3"
            EnableDependentAnimation="True">
            <DoubleAnimation.EasingFunction>
                <QuadraticEase EasingMode="EaseInOut"/>
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>
    </Storyboard>

    <!-- 缓入版本动画 -->
    <Storyboard x:Name="MoveEaseInAnim">
        <DoubleAnimation 
            Storyboard.TargetName="TargetBtn"
            Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.Y)"
            From="10" To="0" Duration="0:0:0.3"
            EnableDependentAnimation="True">
            <DoubleAnimation.EasingFunction>
                <QuadraticEase EasingMode="EaseIn"/>
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>
    </Storyboard>

    <!-- 缓出版本动画 -->
    <Storyboard x:Name="MoveEaseOutAnim">
        <DoubleAnimation 
            Storyboard.TargetName="TargetBtn"
            Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.Y)"
            From="10" To="0" Duration="0:0:0.3"
            EnableDependentAnimation="True">
            <DoubleAnimation.EasingFunction>
                <QuadraticEase EasingMode="EaseOut"/>
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>
    </Storyboard>
</Page.Resources>

<!-- 目标按钮,默认Y偏移为10 -->
<Button x:Name="TargetBtn" Content="点击触发动画" Click="TargetBtn_Click">
    <UIElement.RenderTransform>
        <TranslateTransform Y="10"/>
    </UIElement.RenderTransform>
</Button>

后台代码触发对应动画:

private void TargetBtn_Click(object sender, RoutedEventArgs e)
{
    // 按需调用对应缓动的动画即可
    MoveEaseInOutAnim.Begin();
    // MoveEaseInAnim.Begin();
    // MoveEaseOutAnim.Begin();
}

方法2:C#代码动态实现(适合需要动态调整参数的场景)

封装通用动画方法,可直接传入缓动类型参数:

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Animation;

public void RunButtonMoveAnim(Button target, EasingMode easingMode, double duration = 0.3)
{
    // 初始化位移变换
    if (target.RenderTransform is not TranslateTransform transform)
    {
        transform = new TranslateTransform { Y = 10 };
        target.RenderTransform = transform;
    }

    // 创建位移动画
    var moveAnim = new DoubleAnimation
    {
        From = 10,
        To = 0,
        Duration = TimeSpan.FromSeconds(duration),
        EnableDependentAnimation = true,
        EasingFunction = new QuadraticEase { EasingMode = easingMode }
    };

    // 绑定并启动动画
    Storyboard.SetTarget(moveAnim, target);
    Storyboard.SetTargetProperty(moveAnim, "(UIElement.RenderTransform).(TranslateTransform.Y)");
    var storyboard = new Storyboard();
    storyboard.Children.Add(moveAnim);
    storyboard.Begin();
}

调用示例:

// 触发缓入缓出动画
RunButtonMoveAnim(TargetBtn, EasingMode.EaseInOut);
// 触发缓入动画
RunButtonMoveAnim(TargetBtn, EasingMode.EaseIn);
// 触发缓出动画
RunButtonMoveAnim(TargetBtn, EasingMode.EaseOut);

缓动效果说明

  • EaseInOut:动画启动、结束阶段速度平缓,中间段速度最快
  • EaseIn:动画启动时速度慢,后续逐步加速到最高速
  • EaseOut:动画启动时速度最快,后续逐步减速直到停止

注意:EnableDependentAnimation必须设置为True,UWP默认禁用部分属性的依赖动画,开启后才能正常执行。如果需要调整缓动曲线,也可以将QuadraticEase替换为CubicEase、CircleEase等其他内置缓动类。

内容的提问来源于stack exchange,提问作者Mubarrat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:15:03