Xamarin.Forms中实现CheckBox控件

Posted Devin.Zhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xamarin.Forms中实现CheckBox控件相关的知识,希望对你有一定的参考价值。

Xamarin.Forms中实现CheckBox控件

由于Xamarin.Forms中没有Checkbox这个基础控件,我们就只能自己来实现啦!

这里采用的是继承Image来实现Checkbox控件,代码如下所示:

IconUnChecked :未选中状态的图片名称

IconChecked:选中状态的图片名称

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using Xamarin.Forms;

namespace AppTest.CustomView
{
    public class Checkbox : Image
    {

        private const string CheckboxUnCheckedImage = "IconUnChecked";
        private const string CheckboxCheckedImage = "IconChecked";


        public Checkbox()
        {
            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(Checkbox), 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 Checkbox;
            if (checkBox != null)
            {
                var value = newValue as bool?;
                checkBox.Checked = value.GetValueOrDefault();
                checkBox.Source = value.GetValueOrDefault() ? CheckboxCheckedImage : CheckboxUnCheckedImage;
            }
        }



    }
}

 

以上是关于Xamarin.Forms中实现CheckBox控件的主要内容,如果未能解决你的问题,请参考以下文章

我是 xamarin 的新手,想在我的 xamarin.forms 项目中实现对话框

在 Xamarin.Forms 项目中实现 MVVM

如何在 Xamarin Forms 中实现 CrossPushNotification 插件?

如何使用依赖注入在 Xamarin.Forms 中实现 Flyoutnavigation

如何在 Xamarin Forms App 中实现 SSO?

如何在 Xamarin Forms 中实现标记聚类(谷歌地图)