XAML弹出框在复选框事件上执行两次



我正在使用Xlabs.Forms.Controls复选框。我在xaml中设置了Checked = False,在CheckedChanged事件中,它会弹出一个确认消息,提示用户是否希望检查它。

在弹出页面上,我为按钮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();
}
}

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

<CheckBox CheckedChanged="CheckBox_CheckedChanged"/>

也打开弹出页面如下:

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

最新更新