@@ -40,6 +40,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Controls
40
40
[ TemplatePart ( Name = nameof ( ColorPicker . CheckeredBackground8Border ) , Type = typeof ( Border ) ) ]
41
41
[ TemplatePart ( Name = nameof ( ColorPicker . CheckeredBackground9Border ) , Type = typeof ( Border ) ) ]
42
42
[ TemplatePart ( Name = nameof ( ColorPicker . CheckeredBackground10Border ) , Type = typeof ( Border ) ) ]
43
+ [ TemplatePart ( Name = nameof ( ColorPicker . ColorPanelSelector ) , Type = typeof ( ListBox ) ) ]
43
44
[ TemplatePart ( Name = nameof ( ColorPicker . ColorSpectrumControl ) , Type = typeof ( ColorSpectrum ) ) ]
44
45
[ TemplatePart ( Name = nameof ( ColorPicker . ColorSpectrumAlphaSlider ) , Type = typeof ( ColorPickerSlider ) ) ]
45
46
[ TemplatePart ( Name = nameof ( ColorPicker . ColorSpectrumThirdDimensionSlider ) , Type = typeof ( ColorPickerSlider ) ) ]
@@ -78,6 +79,7 @@ public partial class ColorPicker : Microsoft.UI.Xaml.Controls.ColorPicker
78
79
private Color ? updatedRgbColor = null ;
79
80
private DispatcherQueueTimer dispatcherQueueTimer = null ;
80
81
82
+ private ListBox ColorPanelSelector ;
81
83
private ColorSpectrum ColorSpectrumControl ;
82
84
private ColorPickerSlider ColorSpectrumAlphaSlider ;
83
85
private ColorPickerSlider ColorSpectrumThirdDimensionSlider ;
@@ -177,6 +179,8 @@ protected override void OnApplyTemplate()
177
179
// We need to disconnect old events first
178
180
this . ConnectEvents ( false ) ;
179
181
182
+ this . ColorPanelSelector = this . GetTemplateChild < ListBox > ( nameof ( ColorPanelSelector ) ) ;
183
+
180
184
this . ColorSpectrumControl = this . GetTemplateChild < ColorSpectrum > ( nameof ( ColorSpectrumControl ) ) ;
181
185
this . ColorSpectrumAlphaSlider = this . GetTemplateChild < ColorPickerSlider > ( nameof ( ColorSpectrumAlphaSlider ) ) ;
182
186
this . ColorSpectrumThirdDimensionSlider = this . GetTemplateChild < ColorPickerSlider > ( nameof ( ColorSpectrumThirdDimensionSlider ) ) ;
@@ -216,6 +220,7 @@ protected override void OnApplyTemplate()
216
220
217
221
base . OnApplyTemplate ( ) ;
218
222
this . UpdateVisualState ( false ) ;
223
+ this . ValidateSelectedPanel ( ) ;
219
224
this . isInitialized = true ;
220
225
this . SetActiveColorRepresentation ( ColorRepresentation . Rgba ) ;
221
226
this . UpdateColorControlValues ( ) ; // TODO: This will also connect events after, can we optimize vs. doing it twice with the ConnectEvents above?
@@ -1065,6 +1070,48 @@ private void SetDefaultPalette()
1065
1070
return ;
1066
1071
}
1067
1072
1073
+ /// <summary>
1074
+ /// Validates and updates the current 'tab' or 'panel' selection.
1075
+ /// If the currently selected tab is collapsed, the next visible tab will be selected.
1076
+ /// </summary>
1077
+ private void ValidateSelectedPanel ( )
1078
+ {
1079
+ object selectedItem = null ;
1080
+
1081
+ if ( this . ColorPanelSelector != null )
1082
+ {
1083
+ if ( this . ColorPanelSelector . SelectedItem == null &&
1084
+ this . ColorPanelSelector . Items . Count > 0 )
1085
+ {
1086
+ // As a failsafe, forcefully select the first item
1087
+ selectedItem = this . ColorPanelSelector . Items [ 0 ] ;
1088
+ }
1089
+ else
1090
+ {
1091
+ selectedItem = this . ColorPanelSelector . SelectedItem ;
1092
+ }
1093
+
1094
+ if ( selectedItem is UIElement selectedElement &&
1095
+ selectedElement . Visibility == Visibility . Collapsed )
1096
+ {
1097
+ // Select the first visible item instead
1098
+ foreach ( object item in this . ColorPanelSelector . Items )
1099
+ {
1100
+ if ( item is UIElement element &&
1101
+ element . Visibility == Visibility . Visible )
1102
+ {
1103
+ selectedItem = item ;
1104
+ break ;
1105
+ }
1106
+ }
1107
+ }
1108
+
1109
+ this . ColorPanelSelector . SelectedItem = selectedItem ;
1110
+ }
1111
+
1112
+ return ;
1113
+ }
1114
+
1068
1115
/***************************************************************************************
1069
1116
*
1070
1117
* Color Update Timer
0 commit comments