zoukankan      html  css  js  c++  java
  • 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;
                }
            }
    
    
    
        }
    }
  • 相关阅读:
    obj文件可视化
    TypeError: unsupported operand type(s) for +: 'range' and 'range'
    ubuntu截屏软件shutter
    什么是Redis缓存穿透、缓存雪崩和缓存击穿
    在 ASP.NET Core 5.0 中访问 HttpContext
    如何使用带有BOM的UTF8编码的C#中的GetBytes()?
    ASP.NET Core 5.0 Web API 自动集成Swashbuckle
    ASP.NET Core 5.0 的新增功能
    面试被问到SQL | delete、truncate、drop 有什么区别?
    3个值得学习和练手的.net企业级开源项目,强烈推荐
  • 原文地址:https://www.cnblogs.com/devin_zhou/p/8550494.html
Copyright © 2011-2022 走看看