1
// Copyright © Microsoft Corporation.
2
// This source is subject to the Microsoft Source License for Silverlight Controls (March 2008 Release).
3
// Please see http://go.microsoft.com/fwlink/?LinkID=111693 for details.
4
// All other rights reserved.
6
using System.Diagnostics;
7
using System.Windows.Media.Animation;
9
namespace System.Windows.Controlsb1
12
/// Represents a button control used in Calendar Control, which reacts to the Click event.
14
[TemplatePart(Name = MONTHBUTTON_elementRootName, Type = typeof(FrameworkElement))]
15
[TemplatePart(Name = MONTHBUTTON_elementFocusVisualName, Type = typeof(UIElement))]
16
[TemplatePart(Name = MONTHBUTTON_stateNormalName, Type = typeof(Storyboard))]
17
[TemplatePart(Name = MONTHBUTTON_statePressName, Type = typeof(Storyboard))]
18
[TemplatePart(Name = MONTHBUTTON_statePressSelectedName, Type = typeof(Storyboard))]
19
[TemplatePart(Name = MONTHBUTTON_stateSelectedName, Type = typeof(Storyboard))]
20
[TemplatePart(Name = MONTHBUTTON_stateMouseOverName, Type = typeof(Storyboard))]
21
[TemplatePart(Name = MONTHBUTTON_MouseOverSelectedName, Type = typeof(Storyboard))]
23
public sealed class MonthButton : CalendarButtonBase
27
private const string MONTHBUTTON_elementFocusVisualName = "FocusVisualElement";
28
private const string MONTHBUTTON_elementRootName = "RootElement";
29
private const string MONTHBUTTON_stateMouseOverName = "MouseOver State";
30
private const string MONTHBUTTON_MouseOverSelectedName = "MouseOver Selected State";
31
private const string MONTHBUTTON_stateNormalName = "Normal State";
32
private const string MONTHBUTTON_statePressName = "Pressed State";
33
private const string MONTHBUTTON_statePressSelectedName = "Pressed Selected State";
34
private const string MONTHBUTTON_stateSelectedName = "Normal Selected State";
40
private UIElement _elementFocusVisual;
41
private FrameworkElement _elementRoot;
42
private bool _isFocusedOverride;
43
private bool _isSelected;
44
private Storyboard _stateNormal;
45
private Storyboard _stateSelected;
46
private Storyboard _stateMouseOver;
47
private Storyboard _stateMouseOverSelected;
48
private Storyboard _statePressed;
49
private Storyboard _statePressedSelected;
53
internal MonthButton(): base()
55
this.IsTabStop = true;
58
#region Internal Properties
60
internal bool IsFocusedOverride
64
return this._isFocusedOverride;
68
this._isFocusedOverride = value;
73
internal bool IsSelected
77
return this._isSelected;
81
this._isSelected = value;
86
#endregion Internal Properties
88
#region Protected methods
90
/// Invoked whenever application code or an internal process,
91
/// such as a rebuilding layout pass, calls the ApplyTemplate method.
93
public override void OnApplyTemplate()
95
base.OnApplyTemplate();
98
object root = GetTemplateChild(MONTHBUTTON_elementRootName);
99
Debug.Assert(typeof(FrameworkElement).IsInstanceOfType(root) || (root == null));
100
_elementRoot = root as FrameworkElement;
102
object focusVisual = GetTemplateChild(MONTHBUTTON_elementFocusVisualName);
103
Debug.Assert(typeof(UIElement).IsInstanceOfType(focusVisual) || (focusVisual == null));
104
_elementFocusVisual = focusVisual as UIElement;
107
if (_elementRoot != null)
109
DependencyObject normal = _elementRoot.Resources[MONTHBUTTON_stateNormalName] as DependencyObject;
110
Debug.Assert(typeof(Storyboard).IsInstanceOfType(normal) || (normal == null));
111
_stateNormal = normal as Storyboard;
113
DependencyObject selected = _elementRoot.Resources[MONTHBUTTON_stateSelectedName] as DependencyObject;
114
Debug.Assert(typeof(Storyboard).IsInstanceOfType(selected) || (selected == null));
115
_stateSelected = selected as Storyboard;
117
DependencyObject mouseOver = _elementRoot.Resources[MONTHBUTTON_stateMouseOverName] as DependencyObject;
118
Debug.Assert(typeof(Storyboard).IsInstanceOfType(mouseOver) || (mouseOver == null));
119
_stateMouseOver = mouseOver as Storyboard;
121
DependencyObject mouseOverSelected = _elementRoot.Resources[MONTHBUTTON_MouseOverSelectedName] as DependencyObject;
122
Debug.Assert(typeof(Storyboard).IsInstanceOfType(mouseOverSelected) || (mouseOverSelected == null));
123
_stateMouseOverSelected = mouseOverSelected as Storyboard;
125
DependencyObject pressed = _elementRoot.Resources[MONTHBUTTON_statePressName] as DependencyObject;
126
Debug.Assert(typeof(Storyboard).IsInstanceOfType(pressed) || (pressed == null));
127
_statePressed = pressed as Storyboard;
129
DependencyObject pressedSelected = _elementRoot.Resources[MONTHBUTTON_statePressSelectedName] as DependencyObject;
130
Debug.Assert(typeof(Storyboard).IsInstanceOfType(pressedSelected) || (pressedSelected == null));
131
_statePressedSelected = pressedSelected as Storyboard;
134
// Sync the logical and visual states of the control
138
#endregion Protected Methods
140
#region Internal Methods
142
internal override void ChangeVisualState()
148
ChangeVisualState(_statePressedSelected);
152
ChangeVisualState(_statePressed);
161
ChangeVisualState(_stateMouseOverSelected);
165
ChangeVisualState(_stateMouseOver);
172
ChangeVisualState(_stateSelected);
176
ChangeVisualState(_stateNormal);
181
if (_elementFocusVisual != null)
183
_elementFocusVisual.Visibility = (_isFocusedOverride) ?
185
Visibility.Collapsed;
189
#endregion Internal Methods