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
相关产品推荐
相关产品推荐

