【问题标题】:XAML Pop up execute twice on checkbox eventXAML Pop up 在复选框事件上执行两次
【发布时间】:2020-04-13 09:22:08
【问题描述】:

我正在使用 Xlabs.Forms.Controls 复选框。我在 xaml 和CheckedChanged 事件中设置了Checked = False,如果他们想要检查它,它会弹出一个确认提示用户。

在我的弹出页面上,我为按钮 YesNo 设置了点击事件。如果条件不同,弹出窗口将执行两次,这意味着当我单击复选框时,它将自动被选中,因此当我在弹出窗口中单击 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();

    }

}

【问题讨论】:

  • 当 Xamarin Forms 有自己的 CheckBox 时,为什么要使用第三方库进行复选框。
  • @sandeepsingh 嗨,我使用了 xamarin 表单复选框,但也有同样的错误,在关闭前弹出两次

标签: xaml xamarin xamarin.forms popup


【解决方案1】:

我建议您使用默认 IsChecked 值,该值对于 Xamarin.Forms.CheckBox 始终为 false

<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);
        }
    }

【讨论】:

  • 您好,感谢您的帮助!如果我使用 await PopupNavigation.Instance,PopAsync() ,它不会关闭弹出窗口..
  • @Charis 我建议你使用一个布尔变量,当弹出页面打开时,它会变为真,因为值更改事件会再次触发。如果该布尔值已经为真,则在 chechedChanged 上触发一个空事件。
猜你喜欢
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 2021-05-10
相关资源
最近更新 更多