XAML всплывающее окно выполнить дважды при событии флажка - PullRequest
0 голосов
/ 13 апреля 2020

Я использую Xlabs.Forms.Controls Checkbox. Я установил Checked = False в xaml и в событии CheckedChanged, появится всплывающее окно с запросом, если он хочет, чтобы он был проверен.

На моей всплывающей странице я установил событие нажатия кнопки Yes и No. Всплывающее окно будет выполнено дважды, если условие не совпадает, то есть, когда я нажимаю на флажок, оно будет автоматически проверено, поэтому, когда я нажимаю No в моем всплывающем окне, оно будет выполнено дважды перед закрытием всплывающего окна. Кто-нибудь знает, почему это происходит?

xaml

<controls:CheckBox x:Name="checkbox" DefaultText="standard" CheckedChanged="checkbox_CheckedChanged" Checked="False"/>

главная страница

private void checkbox_CheckedChanged(object sender, XLabs.EventArgs<bool> e)
    {
        PopupNavigation.Instance.PushAsync(new cbPopUp(this, checkbox));
    }

всплывающая страница

 public partial class cbPopUp
{
    Mainpage mainpage;
    XLabs.Forms.Controls.CheckBox checkBox;
    public cbPopUp(MainPage mpage, XLabs.Forms.Controls.CheckBox cb)
    {
        InitializeComponent();
        mainpage = mpage;
        checkBox = cb;
    }

    private async void btnYes_Clicked(object sender, EventArgs e)
    {
       checkBox .Checked = true;


        await ClosePopup();

    }

    private async void btnNo_Clicked(object sender, EventArgs e)
    {
        checkBox.Checked = false;

        await ClosePopup();
    }
    private async Task ClosePopup()
    {
        await PopupNavigation.Instance.PopAllAsync();

    }

}

1 Ответ

0 голосов
/ 14 апреля 2020

Я предлагаю вам использовать значение IsChecked по умолчанию, которое всегда ложно с Xamarin.Forms.CheckBox

<CheckBox CheckedChanged="CheckBox_CheckedChanged"/>

, также откройте PopUpPage следующим образом:

void CheckBox_CheckedChanged(System.Object sender, Xamarin.Forms.CheckedChangedEventArgs e)
{
   Task.Run(async () => await PopupNavigation.Instance.PushAsync(new YourPopup()));            
}

Я используя Rg.Plugins.Popup.Pages

<?xml version="1.0" encoding="UTF-8"?>
<pages:PopupPage xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:pages="clr-namespace:Rg.Plugins.Popup.Pages;assembly=Rg.Plugins.Popup"
             xmlns:animations="clr-namespace:Rg.Plugins.Popup.Animations;assembly=Rg.Plugins.Popup"
             x:Class="your-nameSpace.PopupView" NavigationPage.HasNavigationBar="false" 
             BackgroundColor="Transparent">
    <pages:PopupPage.Animation>
    <animations:ScaleAnimation 
      PositionIn="Center" PositionOut="Center" ScaleIn="1.2"
      ScaleOut="0.8" DurationIn="400" DurationOut="300" EasingIn="SinOut"
      EasingOut="SinIn" HasBackgroundAnimation="True" />
    </pages:PopupPage.Animation>
    <AbsoluteLayout BackgroundColor="Transparent" Padding="0" Margin="0" VerticalOptions="Center" HorizontalOptions="Center">      
        //your design here
    </AbsoluteLayout>
</pages:PopupPage>
 public partial class PopupView : PopupPage
    {
        public LogoutPopupView()
        {
            InitializeComponent();
            // if you want to use binding
            //this.BindingContext = new PopupViewModel();
        }
        private async void OnClose(object sender, EventArgs e)
        {
            await PopupNavigation.Instance.PopAsync();
        }

        protected override Task OnAppearingAnimationEndAsync()
        {
            return Content.FadeTo(1);
        }

        protected override Task OnDisappearingAnimationBeginAsync()
        {
            return Content.FadeTo(1);
        }
    }
...