C# 如何通过单击更改图片

C# 如何通过单击更改图片,c#,xamarin.forms,C#,Xamarin.forms,我有两个相同类型的图像,一个是蓝色,另一个是粉红色,以模拟点击图像,因此当我点击图像时,它会调用一个屏幕,而不会首先调用另一个图像。 我想要的是在调用另一个屏幕之前,单击蓝色的初始图像,将其更改为粉红色,然后才调用屏幕 <Image x:Name="CmdCalendario" Grid.Row="0" Grid.Column="0" Source="calendarioFiscallivre.png" VerticalOptions="FillAndExpand" Horizonta

我有两个相同类型的图像,一个是蓝色,另一个是粉红色,以模拟点击图像,因此当我点击图像时,它会调用一个屏幕,而不会首先调用另一个图像。 我想要的是在调用另一个屏幕之前,单击蓝色的初始图像,将其更改为粉红色,然后才调用屏幕

 <Image x:Name="CmdCalendario" Grid.Row="0" Grid.Column="0" Source="calendarioFiscallivre.png"  VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"  />
  var CalendarioClick = new TapGestureRecognizer();
            CalendarioClick.Tapped += (s, e) =>
            {
                CmdCalendario.Source = ImageSource.FromResource("Agtmovel.Img.calendarioFiscalpressed.png");
                Navigation.PushAsync(new CalendarioFiscal());

            }; CmdCalendario.GestureRecognizers.Add(CalendarioClick);
可以用于模拟单击图像

<flex:FlexButton
    WidthRequest="76"
    HeightRequest="76"
    CornerRadius="38"
    HorizontalOptions="Center"
    Icon="lightbulb.png"
    ForegroundColor="#ffffff"
    HighlightForegroundColor="#49516F"
    BackgroundColor="#6279B8"
    HighlightBackgroundColor="#8EA4D2" />
CalendarioClick.Tapped中的代码是同步的,它们将按顺序执行。在你进入一个新页面之前,图像资源确实发生了变化,但是变化的过程非常快,你甚至无法理解它

解决方案:

您可以在推送到新页面之前添加短暂延迟。您可以根据需要定义延迟时间

var CalendarioClick = new TapGestureRecognizer();
              CalendarioClick.Tapped += async (s, e) =>
                  {
                      CmdCalendario.BackgroundColor = Color.Pink;
                      //Delay 2000ms, change the time you want here
                      await Task.Delay(2000);
                      Navigation.PushAsync(new CalendarioFiscal());

                  }; 
        CmdCalendario.GestureRecognizers.Add(CalendarioClick);

请参阅:

什么不起作用?你有任何错误吗?没有,但当我点击图像时,它会调用另一个屏幕,因此在调用屏幕之前,不会显示另一个粉红色的图像。因此,它只显示调用屏幕后的图像,如果我按下后退按钮,则更改图片@GeraldVersluisMaybe删除Navigation.PushAsyncnew CalendarIOFinancial;会阻止它离开吗?你想在nagivating之前延迟吗?是的,我想能够更改图像,然后导航到@MikaelDúiBolinder@amarotati,那么您希望在导航开始之前有一个短的延迟,比如500毫秒或1000毫秒?