11using System . Windows ;
2- using System . Windows . Controls ;
3- using System . Windows . Media ;
2+ using ControlzEx ;
43
54namespace MaterialDesignThemes . Wpf
65{
7- public enum BadgePlacementMode
8- {
9- TopLeft ,
10- Top ,
11- TopRight ,
12- Right ,
13- BottomRight ,
14- Bottom ,
15- BottomLeft ,
16- Left
17- }
18-
196 [ TemplatePart ( Name = BadgeContainerPartName , Type = typeof ( UIElement ) ) ]
20- public class Badged : ContentControl
7+ public class Badged : BadgedEx
218 {
22- public const string BadgeContainerPartName = "PART_BadgeContainer" ;
23- private FrameworkElement _badgeContainer ;
24-
259 static Badged ( )
2610 {
2711 DefaultStyleKeyProperty . OverrideMetadata ( typeof ( Badged ) , new FrameworkPropertyMetadata ( typeof ( Badged ) ) ) ;
2812 }
2913
30- public static readonly DependencyProperty BadgeProperty = DependencyProperty . Register (
31- "Badge" , typeof ( object ) , typeof ( Badged ) , new FrameworkPropertyMetadata ( default ( object ) , FrameworkPropertyMetadataOptions . AffectsArrange , OnBadgeChanged ) ) ;
32-
33- public object Badge
34- {
35- get { return ( object ) GetValue ( BadgeProperty ) ; }
36- set { SetValue ( BadgeProperty , value ) ; }
37- }
38-
39- public static readonly DependencyProperty BadgeBackgroundProperty = DependencyProperty . Register (
40- "BadgeBackground" , typeof ( Brush ) , typeof ( Badged ) , new PropertyMetadata ( default ( Brush ) ) ) ;
41-
42- public Brush BadgeBackground
43- {
44- get { return ( Brush ) GetValue ( BadgeBackgroundProperty ) ; }
45- set { SetValue ( BadgeBackgroundProperty , value ) ; }
46- }
47-
48- public static readonly DependencyProperty BadgeForegroundProperty = DependencyProperty . Register (
49- "BadgeForeground" , typeof ( Brush ) , typeof ( Badged ) , new PropertyMetadata ( default ( Brush ) ) ) ;
50-
51- public Brush BadgeForeground
52- {
53- get { return ( Brush ) GetValue ( BadgeForegroundProperty ) ; }
54- set { SetValue ( BadgeForegroundProperty , value ) ; }
55- }
56-
5714 public static readonly DependencyProperty BadgeColorZoneModeProperty = DependencyProperty . Register (
5815 "BadgeColorZoneMode" , typeof ( ColorZoneMode ) , typeof ( Badged ) , new PropertyMetadata ( default ( ColorZoneMode ) ) ) ;
5916
@@ -62,82 +19,5 @@ public ColorZoneMode BadgeColorZoneMode
6219 get { return ( ColorZoneMode ) GetValue ( BadgeColorZoneModeProperty ) ; }
6320 set { SetValue ( BadgeColorZoneModeProperty , value ) ; }
6421 }
65-
66- public static readonly DependencyProperty BadgePlacementModeProperty = DependencyProperty . Register (
67- "BadgePlacementMode" , typeof ( BadgePlacementMode ) , typeof ( Badged ) , new PropertyMetadata ( default ( BadgePlacementMode ) ) ) ;
68-
69- public BadgePlacementMode BadgePlacementMode
70- {
71- get { return ( BadgePlacementMode ) GetValue ( BadgePlacementModeProperty ) ; }
72- set { SetValue ( BadgePlacementModeProperty , value ) ; }
73- }
74-
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-
114- public override void OnApplyTemplate ( )
115- {
116- base . OnApplyTemplate ( ) ;
117-
118- _badgeContainer = GetTemplateChild ( BadgeContainerPartName ) as FrameworkElement ;
119- }
120-
121- protected override Size ArrangeOverride ( Size arrangeBounds )
122- {
123- var result = base . ArrangeOverride ( arrangeBounds ) ;
124-
125- if ( _badgeContainer == null ) return result ;
126-
127- var containerDesiredSize = _badgeContainer . DesiredSize ;
128- if ( ( containerDesiredSize . Width == 0.0 || containerDesiredSize . Height == 0.0 )
129- && ! double . IsNaN ( _badgeContainer . ActualWidth ) && ! double . IsInfinity ( _badgeContainer . ActualWidth )
130- && ! double . IsNaN ( _badgeContainer . ActualHeight ) && ! double . IsInfinity ( _badgeContainer . ActualHeight ) )
131- {
132- containerDesiredSize = new Size ( _badgeContainer . ActualWidth , _badgeContainer . ActualHeight ) ;
133- }
134-
135- var h = 0 - containerDesiredSize . Width / 2 ;
136- var v = 0 - containerDesiredSize . Height / 2 ;
137- _badgeContainer . Margin = new Thickness ( 0 ) ;
138- _badgeContainer . Margin = new Thickness ( h , v , h , v ) ;
139-
140- return result ;
141- }
14222 }
14323}
0 commit comments