Итак, вот как я бы обошёл эту проблему:
Я бы добавил метку к представлению, поэтому у нас есть button1 , метка , button2 : одна над другой.
При запуске вы видите button1 видимым, а два других невидимыми.
Когда кнопка 1 нажата, она скрыта: button1.IsVisible = false
. Немедленно метка становится видимой, а затем вы можете сидеть и ждать, пока операция не завершится ( очень важно, чтобы вы await
поместили ее в обработчик событий кнопки !! ), и когда работа завершена, вы устанавливаете label visibility в false и button2 как видимые.
И вы можете вернуться снова, следуя той же логике.
Окончательный результат заключается в том, что при нажатии button1 вместо этого появляется метка , поэтому, если пользователь продолжает нажимать, эти касания не сохраняются / сохраняются !
Код для Xamarin.Forms , который будет работать именно так, как показано ниже.
1046 * XAML *
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyApp.Page1">
<ContentPage.Content>
<Grid HorizontalOptions="CenterAndExpand"
VerticalOptions="CenterAndExpand">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Button x:Name="button1"
Text="Go to the Moon!"
Clicked="Button_Clicked"/>
<Label x:Name="label"
IsVisible="False"/>
<Button x:Name="button2"
Text="Go back home!"
IsVisible="False"
Clicked="Button_Clicked_1"/>
</Grid>
</ContentPage.Content>
</ContentPage>
Код позади
using System;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace MyApp
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class Page1 : ContentPage
{
public Page1 ()
{
InitializeComponent ();
}
String text1 = "Going to the moon...";
String text2 = "Going back home...";
private async void Button_Clicked(object sender, EventArgs e)
{
((Button)sender).IsVisible = false;
label.Text = text1;
label.IsVisible = true;
// Simulates running process!
await Task.Delay(3000);
label.IsVisible = false;
button2.IsVisible = true;
}
private async void Button_Clicked_1(object sender, EventArgs e)
{
((Button)sender).IsVisible = false;
label.Text = text2;
label.IsVisible = true;
// Simulates running process!
await Task.Delay(3000);
label.IsVisible = false;
button1.IsVisible = true;
}
}
}
Надеюсь, вы найдете это полезным:)