using System;
using System.Collections.Generic;

using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace FLY.ControlLibrary
{
    /// <summary>
    /// 带IsChecked 的button, 不能通过点击 使IsChecked改变
    /// </summary>
    public class NoToggleButton : Button
    {
        /// <summary>
        /// 显示的状态
        /// </summary>
        public static readonly DependencyProperty IsCheckedProperty = DependencyProperty.Register("IsChecked", typeof(bool), typeof(NoToggleButton));
        /// <summary>
        /// Off时的颜色
        /// </summary>
        public static readonly DependencyProperty OffBrushProperty = DependencyProperty.Register("OffBrush", typeof(Brush), typeof(NoToggleButton));
        /// <summary>
        /// On时的颜色
        /// </summary>
        public static readonly DependencyProperty OnBrushProperty = DependencyProperty.Register("OnBrush", typeof(Brush), typeof(NoToggleButton));
        /// <summary>
        /// Off时文字
        /// </summary>
        public static readonly DependencyProperty OffLabelProperty = DependencyProperty.Register("OffLabel", typeof(string), typeof(NoToggleButton));
        /// <summary>
        /// On时文字
        /// </summary>
        public static readonly DependencyProperty OnLabelProperty = DependencyProperty.Register("OnLabel", typeof(string), typeof(NoToggleButton));


        public NoToggleButton()
        {
            InitializeStyle();
        }
        private void InitializeStyle()
        {
            var resources = new ResourceDictionary();

            resources.Source = new Uri("pack://application:,,,/FLY.ControlLibrary;component/Themes/NoToggleButtonStyle.xaml", UriKind.Absolute);
            //resources.Source = new Uri("/Themes/WindowBigCloseStyle.xaml", UriKind.Relative);

            this.Style = resources["NoToggleButtonStyle"] as Style;

        }
        public static bool GetIsChecked(UIElement element)
        {
            return (bool)element.GetValue(IsCheckedProperty);
        }
        public static void SetIsChecked(UIElement element, bool isClecked)
        {
            element.SetValue(IsCheckedProperty, isClecked);
        }

        public static Brush GetOffBrush(UIElement element)
        {
            return (Brush)element.GetValue(OffBrushProperty);
        }
        public static void SetOffBrush(UIElement element, Brush brush)
        {
            element.SetValue(OffBrushProperty, brush);
        }
        public static Brush GetOnBrush(UIElement element)
        {
            return (Brush)element.GetValue(OnBrushProperty);
        }
        public static void SetOnBrush(UIElement element, Brush brush)
        {
            element.SetValue(OnBrushProperty, brush);
        }


        public static string GetOnLabel(UIElement element)
        {
            return (string)element.GetValue(OnLabelProperty);
        }
        public static void SetOnLabel(UIElement element, string onLabel)
        {
            element.SetValue(OnLabelProperty, onLabel);
        }

        public static string GetOffLabel(UIElement element)
        {
            return (string)element.GetValue(OffLabelProperty);
        }
        public static void SetOffLabel(UIElement element, string offLabel)
        {
            element.SetValue(OffLabelProperty, offLabel);
        }


        public bool IsChecked
        {
            get
            {
                return (bool)GetValue(IsCheckedProperty);
            }
            set
            {
                SetValue(IsCheckedProperty, value);
            }
        }
        public Brush OnBrush
        {
            get
            {
                return (Brush)GetValue(OnBrushProperty);
            }
            set
            {
                SetValue(OnBrushProperty, value);
            }
        }
        public Brush OffBrush
        {
            get
            {
                return (Brush)GetValue(OffBrushProperty);
            }
            set
            {
                SetValue(OffBrushProperty, value);
            }
        }
        public string OnLabel
        {
            get
            {
                return (string)GetValue(OnLabelProperty);
            }
            set
            {
                SetValue(OnLabelProperty, value);
            }
        }
        public string OffLabel
        {
            get
            {
                return (string)GetValue(OffLabelProperty);
            }
            set
            {
                SetValue(OffLabelProperty, value);
            }
        }

    }
}
