2014-12-15 4 views
6

Мне нужен элемент управления флажком в форматах xamarin, а также событие, когда элемент управления проверяется, как я могу это получить, я использую управление переключателем, но не имеет никакого события, когда IsChecked as изменено, мне нужно сгруппировать флажок, его невозможно в управлении переключателем в формах xamarinКак создать флажок в формах xamarin

+0

Возможный дубликат [Как добавить Checkbox в Xamarin.Forms в Xaml файле?] (Http://stackoverflow.com/questions/30772510/how-to-add-checkbox-in-xamarin-forms- in-xaml-file) –

+0

Если вы ищете способ создать свой собственный флажок, я ответил, что здесь: http://stackoverflow.com/questions/30772510/how-to-add-checkbox-in-xamarin-forms -in-xaml-file/39687160 # 39687160 – Kasper

ответ

11

Управление коммутатором имеет событие Toggled, которое будет срабатывать при изменении состояния.

Формы не имеют элемента управления флажком, поскольку на каждой мобильной платформе для этого не существует элемента управления Checkbox.

XF Labs (набор расширений с открытым исходным кодом для XF) имеет флажок checkbox, который может соответствовать вашим потребностям.

+0

Большое спасибо –

0
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; 
     } 
    } 
} 
Смежные вопросы