using System; using System.Windows; using System.Windows.Controls; using HandyControl.Data; namespace HandyControl.Controls { /// /// 标记 /// public class Badge : ContentControl { public static readonly RoutedEvent ValueChangedEvent = EventManager.RegisterRoutedEvent("ValueChanged", RoutingStrategy.Bubble, typeof(EventHandler>), typeof(Badge)); public event EventHandler> ValueChanged { add => AddHandler(ValueChangedEvent, value); remove => RemoveHandler(ValueChangedEvent, value); } public static readonly DependencyProperty TextProperty = DependencyProperty.Register( "Text", typeof(string), typeof(Badge), new PropertyMetadata(default(string))); public string Text { get => (string) GetValue(TextProperty); set => SetValue(TextProperty, value); } public static readonly DependencyProperty ValueProperty = DependencyProperty.Register( "Value", typeof(int), typeof(Badge), new PropertyMetadata(ValueBoxes.Int0Box, OnValueChanged)); private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var ctl = (Badge)d; var v = (int)e.NewValue; ctl.Text = v <= ctl.Maximum ? v.ToString() : $"{ctl.Maximum}+"; if (ctl.IsInitialized) { ctl.RaiseEvent(new FunctionEventArgs(ValueChangedEvent, ctl) { Info = v }); } } public int Value { get => (int)GetValue(ValueProperty); set => SetValue(ValueProperty, value); } public static readonly DependencyProperty StatusProperty = DependencyProperty.Register( "Status", typeof(BadgeStatus), typeof(Badge), new PropertyMetadata(default(BadgeStatus))); public BadgeStatus Status { get => (BadgeStatus)GetValue(StatusProperty); set => SetValue(StatusProperty, value); } public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register( "Maximum", typeof(int), typeof(Badge), new PropertyMetadata(ValueBoxes.Int99Box, OnValueChanged)); public int Maximum { get => (int)GetValue(MaximumProperty); set => SetValue(MaximumProperty, value); } public static readonly DependencyProperty BadgeMarginProperty = DependencyProperty.Register( "BadgeMargin", typeof(Thickness), typeof(Badge), new PropertyMetadata(default(Thickness))); public Thickness BadgeMargin { get => (Thickness)GetValue(BadgeMarginProperty); set => SetValue(BadgeMarginProperty, value); } } }