@@ -20,14 +20,15 @@ public enum BadgePlacementMode
2020 public class Badged : ContentControl
2121 {
2222 public const string BadgeContainerPartName = "PART_BadgeContainer" ;
23+ private FrameworkElement _badgeContainer ;
2324
2425 static Badged ( )
2526 {
2627 DefaultStyleKeyProperty . OverrideMetadata ( typeof ( Badged ) , new FrameworkPropertyMetadata ( typeof ( Badged ) ) ) ;
2728 }
2829
2930 public static readonly DependencyProperty BadgeProperty = DependencyProperty . Register (
30- "Badge" , typeof ( object ) , typeof ( Badged ) , new FrameworkPropertyMetadata ( default ( object ) , FrameworkPropertyMetadataOptions . AffectsArrange ) ) ;
31+ "Badge" , typeof ( object ) , typeof ( Badged ) , new FrameworkPropertyMetadata ( default ( object ) , FrameworkPropertyMetadataOptions . AffectsArrange , OnBadgeChanged ) ) ;
3132
3233 public object Badge
3334 {
@@ -63,16 +64,53 @@ public ColorZoneMode BadgeColorZoneMode
6364 }
6465
6566 public static readonly DependencyProperty BadgePlacementModeProperty = DependencyProperty . Register (
66- "BadgePlacementMode" , typeof ( BadgePlacementMode ) , typeof ( Badged ) , new PropertyMetadata ( default ( BadgePlacementMode ) ) ) ;
67-
68- private FrameworkElement _badgeContainer ;
67+ "BadgePlacementMode" , typeof ( BadgePlacementMode ) , typeof ( Badged ) , new PropertyMetadata ( default ( BadgePlacementMode ) ) ) ;
6968
7069 public BadgePlacementMode BadgePlacementMode
7170 {
7271 get { return ( BadgePlacementMode ) GetValue ( BadgePlacementModeProperty ) ; }
7372 set { SetValue ( BadgePlacementModeProperty , value ) ; }
7473 }
7574
75+ public static readonly RoutedEvent BadgeChangedEvent =
76+ EventManager . RegisterRoutedEvent (
77+ "BadgeChanged" ,
78+ RoutingStrategy . Bubble ,
79+ typeof ( RoutedPropertyChangedEventHandler < object > ) ,
80+ typeof ( Badged ) ) ;
81+
82+ public event RoutedPropertyChangedEventHandler < object > BadgeChanged
83+ {
84+ add { AddHandler ( BadgeChangedEvent , value ) ; }
85+ remove { RemoveHandler ( BadgeChangedEvent , value ) ; }
86+ }
87+
88+ private static readonly DependencyPropertyKey IsBadgeSetPropertyKey =
89+ DependencyProperty . RegisterReadOnly (
90+ "IsBadgeSet" , typeof ( bool ) , typeof ( Badged ) ,
91+ new PropertyMetadata ( default ( bool ) ) ) ;
92+
93+ public static readonly DependencyProperty IsBadgeSetProperty =
94+ IsBadgeSetPropertyKey . DependencyProperty ;
95+
96+ public bool IsBadgeSet
97+ {
98+ get { return ( bool ) GetValue ( IsBadgeSetProperty ) ; }
99+ private set { SetValue ( IsBadgeSetPropertyKey , value ) ; }
100+ }
101+
102+ private static void OnBadgeChanged ( DependencyObject d , DependencyPropertyChangedEventArgs e )
103+ {
104+ var instance = ( Badged ) d ;
105+
106+ instance . IsBadgeSet = ! string . IsNullOrWhiteSpace ( e . NewValue as string ) || ( e . NewValue != null && ! ( e . NewValue is string ) ) ;
107+
108+ var args = new RoutedPropertyChangedEventArgs < object > (
109+ e . OldValue ,
110+ e . NewValue ) { RoutedEvent = BadgeChangedEvent } ;
111+ instance . RaiseEvent ( args ) ;
112+ }
113+
76114 public override void OnApplyTemplate ( )
77115 {
78116 base . OnApplyTemplate ( ) ;
0 commit comments