Reputation: 3660
I currently trying to implement two linked Switch element. When one is toggled the other is untoggled.
But when my event is triggered, the clicked Switch do not finish is toggled.
The XAML :
<StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand">
<Switch x:Name="WomanGenderSwitch" IsToggled="true" Toggled="HandleWomanToggled" Scale="0.5">
</Switch>
<Label FontSize="12" x:Name="WomanSwitchLabel" TextColor="#ddd" VerticalTextAlignment="Center">
</Label>
<Switch x:Name="ManGenderSwitch" Toggled="HandleManToggled" Scale="0.5">
</Switch>
<Label FontSize="12" x:Name="ManSwicthLabel" TextColor="#ddd" VerticalTextAlignment="Center">
</Label>
</StackLayout>
Code Behind :
void HandleManToggled(object sender, Xamarin.Forms.ToggledEventArgs e)
{
var s = sender as Switch;
if (s.IsToggled)
WomanGenderSwitch.IsToggled = false;
else
WomanGenderSwitch.IsToggled = false;
}
void HandleWomanToggled(object sender, Xamarin.Forms.ToggledEventArgs e)
{
var s = sender as Switch;
if (s.IsToggled)
ManGenderSwitch.IsToggled = false;
else
ManGenderSwitch.IsToggled = false;
}
Upvotes: 0
Views: 765
Reputation: 74209
You can re-use the same Handler for both Switches and since toggling the other Switch will cause its handler to be invoked you need to disable it otherwise you end up with a non-ending event ripple:
<StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand">
<Switch x:Name="WomanGenderSwitch" IsToggled="true" Toggled="HandleToggled" Scale="0.5" />
<Label FontSize="12" x:Name="WomanSwitchLabel" TextColor="#ddd" VerticalTextAlignment="Center" />
<Switch x:Name="ManGenderSwitch" Toggled="HandleToggled" Scale="0.5" />
<Label FontSize="12" x:Name="ManSwicthLabel" TextColor="#ddd" VerticalTextAlignment="Center" />
</StackLayout>
void HandleToggled(object sender, Xamarin.Forms.ToggledEventArgs e)
{
var aSwitch = ((sender == WomanGenderSwitch) ? ManGenderSwitch : WomanGenderSwitch);
aSwitch.Toggled -= HandleToggled;
aSwitch.IsToggled = !aSwitch.IsToggled;
aSwitch.Toggled += HandleToggled;
}
bool busy;
void HandleToggled(object sender, Xamarin.Forms.ToggledEventArgs e)
{
if (busy == true) return;
busy = true;
var aSwitch = ((sender == WomanGenderSwitch) ? ManGenderSwitch : WomanGenderSwitch);
aSwitch.IsToggled = !aSwitch.IsToggled;
busy = false;
}
Upvotes: 3
Reputation: 6953
As Parsa said, your code does the same think regardless of IsToggled.
Try something like this:
void HandleManToggled(object sender, Xamarin.Forms.ToggledEventArgs e)
{
var s = sender as Switch;
if (s != null)
{
WomanGenderSwitch.IsToggled = s.IsToggled == false;
}
}
void HandleWomanToggled(object sender, Xamarin.Forms.ToggledEventArgs e)
{
var s = sender as Switch;
if (s != null)
{
ManGenderSwitch.IsToggled = s.IsToggled == false;
}
}
Upvotes: 0