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

C#/Xamarin中Grid坐标不更新问题求助

问题分析与解决
  • 核心原因:TranslateTo是通过TranslationX/TranslationY属性实现位移动画的,它不会修改控件的X和Y原始坐标。你看到的视觉位移是动画叠加的偏移效果,而非控件本身位置的改变,所以后续获取X/Y自然还是初始值。

  • 修复方案:动画完成后,手动交换两个Grid的X、Y坐标,同时重置它们的TranslationX和TranslationY为0,这样既保留视觉交换的结果,又能让控件的真实坐标同步更新。

修改后的代码:

public async void changepos(Grid grid)
{
    double posAX = startergrid.X;
    double posAY = startergrid.Y;
    double posBX = grid.X;
    double posBY = grid.Y;

    // 执行缩放动画
    await grid.ScaleTo(1.2, 75, Easing.Linear);
    // 让两个位移动画同时执行,更贴合"交换位置"的逻辑
    await Task.WhenAll(
        grid.TranslateTo(posAX - posBX, posAY - posBY, 100, Easing.Linear),
        startergrid.TranslateTo(posBX - posAX, posBY - posAY, 100, Easing.Linear)
    );
    await grid.ScaleTo(1, 75);
    await startergrid.ScaleTo(1, 75);

    // 手动交换真实坐标
    startergrid.X = posBX;
    startergrid.Y = posBY;
    grid.X = posAX;
    grid.Y = posAY;

    // 重置Translation属性,避免后续动画出现偏移叠加问题
    startergrid.TranslationX = 0;
    startergrid.TranslationY = 0;
    grid.TranslationX = 0;
    grid.TranslationY = 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:44:59