Xamarin Forms按钮添加导航逻辑后点击背景色不生效问题
问题原因
- 执行顺序错误:你先执行了
Application.Current.MainPage.Navigation.PushAsync导航逻辑,新页面Page1会直接覆盖在当前页面上层,后续修改按钮背景色的代码即使执行成功,用户也看不到被遮挡的原页面按钮,视觉上就会觉得背景色修改失效。如果此时返回到原页面,你会发现按钮颜色其实已经被修改。 - 异步方法调度问题:
PushAsync是异步方法,你的代码没有添加await关键字等待执行,导航相关的UI渲染任务会优先占用主线程资源,背景色修改的UI更新请求可能会被调度延后甚至丢弃,进一步加剧该问题。 - 额外补充:你当前代码中
Activator.CreateInstance(new Page1())存在语法错误,Activator.CreateInstance的入参应该是类型对象而非页面实例,直接写new Page1()即可完成页面创建,不需要调用Activator.CreateInstance。
修复方案
调整代码执行顺序,先修改按钮背景色,再执行导航逻辑即可。如果需要让用户清晰感知到按钮点击的颜色反馈,可增加极短的延迟后再执行导航:
// 方法需要添加async修饰符支持await private async void Navigate(object sender, EventArgs e) { Button? button = sender as Button; if (button != null) { // 先修改按钮背景色 button.BackgroundColor = Color.FromHex("#332196F3"); // 可选:添加100毫秒延迟,让用户看到颜色变化再跳转,不需要可以删掉这行 await Task.Delay(100); // 执行导航逻辑,添加await等待异步操作完成 await Application.Current.MainPage.Navigation.PushAsync(new Page1()); } }
内容的提问来源于stack exchange,提问作者plamtod
相关产品推荐
相关产品推荐

