using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace FLY.ControlLibrary
{
///
/// PercentRing.xaml 的交互逻辑
///
public partial class PercentRing : UserControl, INotifyPropertyChanged
{
#region 附加属性
///
/// 比例
///
public static readonly DependencyProperty RatioProperty =
DependencyProperty.Register("Ratio", typeof(double), typeof(PercentRing), new PropertyMetadata(0.3,
new PropertyChangedCallback(delegate (DependencyObject d, DependencyPropertyChangedEventArgs e)
{
})));
///
/// 比例
///
public double Ratio {
get
{
return (double)GetValue(RatioProperty);
}
set
{
SetValue(RatioProperty, value);
NotifyPropertyChanged("Ratio");
}
}
///
/// 总量
///
public static readonly DependencyProperty TotalProperty =
DependencyProperty.Register("Total", typeof(double), typeof(PercentRing), new PropertyMetadata(1.0));
///
/// 总量
///
public double Total
{
get
{
return (double)GetValue(RatioProperty);
}
set
{
if (value != Total)
{
SetValue(RatioProperty, value);
NotifyPropertyChanged("Total");
}
}
}
///
/// 字的颜色
///
public static readonly DependencyProperty ColorTextProperty =
DependencyProperty.Register("ColorText", typeof(Brush), typeof(PercentRing), new PropertyMetadata(new SolidColorBrush(Color.FromRgb(0x46,0x46,0x46))));
///
/// 字的颜色
///
public Brush ColorText
{
get
{
return (Brush)GetValue(ColorTextProperty);
}
set
{
if (value != ColorText)
{
SetValue(ColorTextProperty, value);
NotifyPropertyChanged("ColorText");
}
}
}
///
/// 单位的颜色
///
public static readonly DependencyProperty ColorUnitProperty =
DependencyProperty.Register("ColorUnit", typeof(Brush), typeof(PercentRing), new PropertyMetadata(new SolidColorBrush(Color.FromRgb(0x46, 0x46, 0x46))));
///
/// 单位的颜色
///
public Brush ColorUnit
{
get
{
return (Brush)GetValue(ColorUnitProperty);
}
set
{
if (value != ColorUnit)
{
SetValue(ColorUnitProperty, value);
NotifyPropertyChanged("ColorUnit");
}
}
}
#endregion
///
///
///
public PercentRing()
{
InitializeComponent();
//this.DataContext = this;
Draw();
}
void Draw()
{
arc_value.DataContext = this;
run_value.DataContext = this;
run_unit.DataContext = this;
}
#region INotifyPropertyChanged 成员
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
public class Percent2AngleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is double))
return 0;
double d = (double)value;
return d * 360;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class Percent2AngleMultiConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values.Length != 2)
return 0;
if (!(values[0] is double))
return 0;
if (!(values[1] is double))
return 0;
double d = (double)values[0] / ((double)values[1]);
return d * 360;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class PercentConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is double))
return 0;
double d = (double)value;
return d * 100;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class PercentMultiConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values.Length != 2)
return 0;
if (!(values[0] is double))
return 0;
if (!(values[1] is double))
return 0;
double d = (double)values[0] / ((double)values[1]);
return d * 100;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class TestUnit_PercentRing
{
public double Ratio { get; set; }
public double Total { get; set; }
public Brush ColorText { get; set; }
public Brush ColorUnit { get; set; }
}
}