-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
/
Copy pathToolbarToggleButton.cs
180 lines (140 loc) · 3.43 KB
/
ToolbarToggleButton.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
// Copyright (c) 2024 Files Community
// Licensed under the MIT License. See the LICENSE.
namespace Files.App.Controls
{
public partial class ToolbarToggleButton : ToggleButton, IToolbarItemSet
{
// True when a button has its Content property assigned
private bool _hasContent = false;
public ToolbarToggleButton()
{
DefaultStyleKey = typeof( ToolbarToggleButton );
}
protected override void OnApplyTemplate()
{
RegisterPropertyChangedCallback( ContentProperty , OnContentChanged );
base.OnApplyTemplate();
UpdateContentStates( CheckHasContent() );
}
#region Private Getters
private bool CheckHasContent()
{
return _hasContent;
}
#endregion
#region Private Setters
private void SetHasContent(bool newValue)
{
_hasContent = newValue;
}
#endregion
#region Update functions
/// <summary>
/// Updates the ToolbarButton's Label string value as it changes.
/// </summary>
/// <param name="newLabel"></param>
private void UpdateLabel(string newLabel)
{
///
/// Updates the internal item's Text or Label
/// property as it changes.
///
}
private void UpdateContent(object newContent)
{
if ( CheckHasContent() == false )
{
// We clear the content
}
else
{
// We make sure the content displays
}
UpdateContentStates( CheckHasContent() );
}
/// <summary>
/// Sets the ToolbarButton's ContentState based on whether the
/// Content property has been assigned.
/// </summary>
/// <param name="hasContent"></param>
private void UpdateContentStates(bool hasContent)
{
if ( hasContent )
{
VisualStateManager.GoToState( this , HasContentStateName , true );
}
else
{
VisualStateManager.GoToState( this , HasNoContentStateName , true );
}
}
/// <summary>
/// Updates the ToolbarButton's ThemedIcon TemplatePart's Style value
/// </summary>
/// <param name="newStyle"></param>
private void UpdateThemedIcon(Style newStyle)
{
///
/// Updates the internal item's ThemedIcon
/// Style as it changes.
///
}
/// <summary>
/// Updates the ToolbarButton's ThemedIcon.IconSize double value
/// </summary>
/// <param name="newSize"></param>
private void UpdateIconSize(double newSize)
{
///
/// Updates the internal item's ThemedIcon
/// IconSize as it changes.
///
}
#endregion
#region Property Changed Events
/// <summary>
/// Invoked when the Label string property has changed
/// </summary>
/// <param name="newLabel"></param>
private void LabelChanged(string newLabel)
{
UpdateLabel( newLabel );
}
/// <summary>
/// Invoked when the ThemedIcon Style property has changed.
/// </summary>
/// <param name="newStyle"></param>
private void ThemedIconChanged(Style newStyle)
{
UpdateThemedIcon( newStyle );
}
/// <summary>
/// Invoked when the IconSize double property has changed.
/// </summary>
/// <param name="newSize"></param>
private void IconSizeChanged(double newSize)
{
UpdateIconSize( newSize );
}
#endregion
#region ButtonBase Events
/// <summary>
/// Invoked when the ToolbarButton's ButtonBase OnContentChanged event
/// is triggered.
/// </summary>
/// <param name="newContent"></param>
private void ContentChanged(object newContent)
{
if ( newContent != null )
{
SetHasContent( true );
}
else
{
SetHasContent( false );
}
UpdateContent( newContent );
}
#endregion
}
}