Как создать флажок в формах xamarin
Мне нужен элемент управления checkbox в формах xamarin, а также событие, когда элемент управления check, как я могу это получить, я использую элемент управления switch, но у него нет никакого события при IsChecked как изменено, мне нужно сгруппировать флажок, его невозможно в элементе управления switch в формах xamarin
2 ответов
переключатель управления имеет включена событие, которое будет срабатывать при изменении состояния.
Forms не имеет элемента управления Checkbox, потому что в каждой мобильной платформе нет базового элемента управления Checkbox для его сопоставления.
XF Labs (набор расширений с открытым исходным кодом для XF) имеет элемент управления beta checkbox, который может соответствовать вашим потребностям.
public class CustomCheckbox : Image
{
private const string CheckboxUnCheckedImage = "checkbox_unchecked";
private const string CheckboxCheckedImage = "checkbox_checked";
public CustomCheckbox()
{
Source = CheckboxUnCheckedImage;
var imageTapGesture = new TapGestureRecognizer();
imageTapGesture.Tapped += ImageTapGestureOnTapped;
GestureRecognizers.Add(imageTapGesture);
PropertyChanged += OnPropertyChanged;
}
private void ImageTapGestureOnTapped(object sender, EventArgs eventArgs)
{
if (IsEnabled)
{
Checked = !Checked;
}
}
/// <summary>
/// The checked changed event.
/// </summary>
public event EventHandler<bool> CheckedChanged;
/// <summary>
/// The checked state property.
/// </summary>
public static readonly BindableProperty CheckedProperty = BindableProperty.Create("Checked", typeof(bool), typeof(CustomCheckbox), false, BindingMode.TwoWay, propertyChanged: OnCheckedPropertyChanged);
public bool Checked
{
get
{
return (bool)GetValue(CheckedProperty);
}
set
{
if (Checked != value)
{
SetValue(CheckedProperty, value);
CheckedChanged?.Invoke(this, value);
}
}
}
private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e?.PropertyName == IsEnabledProperty.PropertyName)
{
Opacity = IsEnabled ? 1 : 0.5;
}
}
private static void OnCheckedPropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
var checkBox = bindable as CustomCheckbox;
if (checkBox != null)
{
var value = newValue as bool?;
checkBox.Checked = value.GetValueOrDefault();
checkBox.Source = value.GetValueOrDefault() ? CheckboxCheckedImage : CheckboxUnCheckedImage;
}
}
}